js一维数组转二维数组--记录自己工作常用到的

123 阅读1分钟

1、利用while循环从左至右插入数组,会改变原数组长度。

@params {row:行数,arr:需要处理的一维数组}

 arrTrans(row, arr) {
   const newArr = [];
   while (arr.length > 0) {
    newArr.push(arr.splice(0, row));
   }
   return newArr;
 }

2、利用数组的slice方法对一维数组进行切割再push到一个大数组中,会改变原数组长度。

arrTrans(row, arr) {
   const newArr = [];   
   let len = arr.length
   let lineNum = len % row === 0 ? len / row : Math.floor( (len / row) + 1 );
    for (let i = 0; i < lineNum; i++) {
       let temp = arr.slice(i*n, i*n+n);
       newArr.push(JSON.parse(JSON.stringify(temp)));
    }
    return newArr
 }

3、利用矩阵循环行和列,进行数组行和列的重新插入,不改变原数组长度。

 arrTrans(row, arr) {
   const newArr = [];   
   for (let i = 0, j = 0; i < arr.length; i += row) {
        newArr[j] = []
        for (let k = 0; k < row; k++) {
            if (i + k < arr.length)
                newArr[j].push(arr[i + k])
        }
        j++
    }
    return newArr
 }

4、简单数组遍历判断行数,不改变原数组

 arrTrans(row, arr) {
   const newArr = [];   
   for (let i = 0; i < arr.length; i++) {
     const total = Math.floor(i / row) //判断当前在第几行
       if(!(newArr[total])){ //判断当前是否有数组
            newArr[total]=[]  //如果没有赋值一个空的行数组
       }
       newArr[total].push(arr[i]) // 并且把当前对应的索引里面进行添加
    }
    return newArr
 }