数组的操作

116 阅读1分钟

随机生成一个长度为10 的整数类型的数组,例如[2, 10, 3, 4, 5, 11, 10, 11, 20],将其排列成一个新数组,要求新数组形式如下,例如[[2, 3, 4, 5], [10, 11], [20]]。
分析一下,首先是生成一个长度是10的数组,里面的数据是随机生成,结果是先去重然后按照0-9,10-19,20三个分到数组里面,或者是把连续的放到一个数组里面

function formArray(arr: any[]) {
    //去重排序
    const sortedArr = Array.from(new Set(arr)).sort((a, b) => a - b);
    const map = new Map();
    sortedArr.forEach((v) => {
        //拿到这个数是分到第几个数组0,1,2
        const key = Math.floor(v / 10);
        //拿到数组0,1,2包含的元素
        const group = map.get(key) || [];
        group.push(v);
        根据0,1,2去存起来
        map.set(key, group);
    }); 
    //拿到map里面的值return
    return [...map.values()];
 }
 
 // 求连续的版本function
formArray1(arr: any[]) {
    const sortedArr = Array.from(new Set(arr)).sort((a, b) => a - b);
    return sortedArr.reduce((acc, cur) => {
    const lastArr = acc.slice().pop() || [];
    const lastVal = lastArr.slice().pop();
    if (lastVal!=null && cur-lastVal === 1){
        lastArr.push(cur);
    } else {
        acc.push([cur]);
}
    return acc;
}, []);
}
//定义一个取随机数的函数
function genNumArray(num: number, base = 100) {
    return Array.from({length: num}, () =>
    //0-1的随机数*默认值100,然后向0取整
    Math.floor(Math.random()*base));
}
//10个0-20的随机数
const arr = genNumArray(10, 20);
//[2, 10, 3, 4, 5, 11, 10, 11, 20];

const res = formArray(arr);
console.log(`res ${JSON.stringify(res)}`);