js中数组常见逻辑练习1--统计定量随机数次数

题目简述

编写一个程序,用于产生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

分析
  1. 定义一个对象record
  2. 这个对象用于接收上面数组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次,这里只输出在随机数组中首先出现的次数最多的数

  1. 定义一个出现次数最多的对象result
  2. 给result赋值
  3. 在循环中比较并相应赋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

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值