题目简述
编写一个程序,用于产生20个0-10之间的随机数,将这20个随机数存入数组,并通过函数统计这些随机数中出现的次数最多的数,并且统计他出现了多少次。
需求分析和实现
需求1
分析
-创建一个函数, 产生20个0-10之间的随机数,且将这20个随机数存入数组
要实现这一需求,我们可以分析到:
1.创建一个函数
2. 创建一个数组去接收这20个随机数
3. 生成20个随机数
4. 随机数的区间为0-10
5. 赋值
实现
function count() {
// 创建一个数组去接收下面的20个随机数
var arr = new Array(20);
// 获取0-10的20个随机数
for (var i = 0; i < arr.length; i++) {
// Math.random()定义一个随机数区间为0-1,*11是因为Math.random()时定义的随机数小于1,乘以11取整生成0-10的随机数
//arr[i] = parseInt(Math.random() * 11)赋值
arr[i] = parseInt(Math.random() * 11)
}
// 输出arr判断是否生成
console.log(arr);
}
展示
此时我们可以生成一个随机数组,由于每次生成的值都不一样,和下面没有必然联系,这一步某一次生成的值为:
需求2
分析
- 定义一个对象record
- 这个对象用于接收上面数组arr中每个数出现的次数
实现
// 定义一个对象,接收每个数出现的次数
var record = {}
for (var i = 0; i < arr.length; i++) {
// 把arr中每一个数组中的数给record的属性,给属性定义为变量n
var n = arr[i]
// 用[]是因为n是对象的一个变量,“.”只能定义知道具体属性名才能调用具体的属性值
if (record[n]) {
// 定义对象的属性名找到了,属性值+1
record[n]++
} else {
//如果在定义的对象中没找到,则把属性值设为1
record[n] = 1
}
}
// 输出一下record对象检验
console.log(record)
展示
此时对象record中接收上面数组arr中每个数出现的次数,如下
需求3
分析
这一步主要是为了从上面的record对象中输出出现次数最多的数,以及出现最多次数的数
**注意:**假如1出现3次,2也出现3次,这里只输出在随机数组中首先出现的次数最多的数
- 定义一个出现次数最多的对象result
- 给result赋值
- 在循环中比较并相应赋result值,最后输出result。
实现
方法1 (便于理解版)
// 定义一个出现次数最多的对象为result,假设第一个是最大的
result = {
// 假设里面的第一个属性是上面arr的第一个数
// 第一个属性对应的属性值为对应record的arr的第一个值对应的个数
number: arr[0],
count: record[arr[0]]
}
for (var prop in record) {
//当做完上面部分,这时可以开始比较赋值,当record[prop]大于result.count时,给result的number赋值为prop,count赋值record[prop];
result = {
number: prop,
count: record[prop]
}
}
}
方法2(稍微升级一丢丢)
// 定义一个出现次数最多的对象为result,假设第一个是最大的
var result;
for (var prop in record) {
// 当还没有赋值,为空时,给他附上第一个上面查到的值,但是因为是随机数,不知道是哪一个,因此调用上面对象的第一个属性,当调用完第一个属性后,后面就不会进去了
if (!result) {
result = {
number: prop,
count: record[prop]
}
}
// 这步和上面一样
if (record[prop] > result.count) {
result = {
number: prop,
count: record[prop]
}
}
}
方法3(在升级一丢丢)
// 定义一个出现次数最多的对象为result,假设第一个是最大的
var result;
// 循环遍历对象
for (var prop in record) {
//我们可以发现,上面的代码是一样的,为了节省代码量可以这样写。
if (!result || record[prop] > result.count) {
result = {
number: prop,
count: record[prop]
}
}
方法很多,这里只做这一种的演示,有更多办法欢迎交流。
需求4
分析
实现目标输出
实现
console.log(result);
当然这里可以直接return result;
end