js定制输出数组算法

108 阅读3分钟

题目要求:

1.随机生成0-99长度为10的整数类型的数组,
例:[2,5,16,32,7,10,20,24,37]
2.将其排列成一个新数组,要求数组形式如下:
[ [2,5,7] [10,16] [20,24] [32,37] ]

题目思路:

1.获取随机数
2.去重处理
3.排序
4.存储 存储格式 0-9 10-19 20-29 ...

解题:

//获取随机数


//Math.random()方法就是用于生成随机数的,因为单词random的意思正是“随机的”。
该方法生成的结果是 [0, 1) 范围内的浮点数,注意这是一个左闭右开的区间,即该区间包含0而不包含1。

//例如 获取5-10之间随机数,利用math.random获取0-1之间(包含0不包含1) * 区间值    用最大值减最小值加1 得到6 
//获取到0-6 0-6 + 5也就是最小区间值 获取到5-11math.random 获取的其实是5.几到10点几 因此我们需要向下取整

function getRandomNumber(min,max){
    min = Math.floor(min);
    max = Math.floor(max);//向下取整
    
    return  Math.floor(Math.random() * (max - min + 1) + min);
   // 通过(Math.random() * (max - min + 1) + min)来获取我们要的随机数范围,向下取整并返回出去
}
//去重

//生成数组 初始化数组 长度为10 并return进去我们的随机数方法

        let initArr = Array.from({

            length: 10

        }, () => {

            return getRandomNumber(0, 99)

        });
        
//去重 set方法 其他:利用for嵌套for,然后splice去重  indexof方法

//set 是 ES6 提供了新的数据结构 Set。它类似于数组,但是成员的值都是唯一的,没有重复的值。
//Set 本身是一个构造函数,用来生成 Set 数据结构。
        
        initArr = [...new Set(initArr)]; 
        
//当然,也可以使用其他去重方法:
function weiyi(initArr) {

    for (var i = 0; i < initArr.length; i++) {

          for (var j = i + 1; j < init.length; j++) {

                if (initArr[i] == initArr[j]) {

                    initArr.splice(j, 1);

                        j--;
                   }
              }
         }
         return initArr;
       }
//排序  题目可知,采取的是升序方式 我们使用sort方法 当a-b<0 返回负数 ab前

initArr.sort((a,b) => a-b);

//存储

//Map结构存储数据的格式是key-value(这种结构的数据还有Property,但是不常用)。

//Key可以看成是Value 的索引,由于key是用来快速检索value的,所以key不可以重复。
//当几个key重复时,Map集合中只会留下一个key,value会取最后一个。

//首先 我们定一个空对象
const map = {}; //map是key-value类型的值,所以要用空对象
//遍历数组 得到key 然后将item/10
initArr.forEach(item =>{
    const key = Math.floor(item/10);
    
//为什么要item除10 这与分组方式有关,例如在[ [2,5,7] [10,16] [20,24] [32,37]]中,
我们将第一组的257 分别除102就为0.2 50.5 70.7 然后向下取整,均为0;
所以均为0的就被放在了一组,第二组同样/10,可以看出,向下取整后,均为1,所以分到了一组,
然后我们使用此方式进行分组存储

//然后进行判断
//如果key在map里不存在,赋给他初始值也就是空数组 
//如果key存在 把数据push进对应数组  代表同一类元素。
//将所有数据存储完 就得到map

if(!map[key]){
    map[key] = [];
}
map[key].push(item);
    
});

//输出

//由于最后还是一个数组结构,所以先定义一个空数组
const result = [];
//使用for in 语句遍历map
for (const key in map){
    //将值push到result
    result.push(map[key]);
}
console.log(result);

结果:

QQ图片20220510153408.png