鍍金池/ 問答/C++  HTML/ 請教,一維數(shù)組整理成二維數(shù)組如何編寫代碼更為優(yōu)雅?

請教,一維數(shù)組整理成二維數(shù)組如何編寫代碼更為優(yōu)雅?

因項(xiàng)目需要,現(xiàn)有一維數(shù)組需要重新按每10個元素為一個數(shù)組整理成二維數(shù)組.
例如,把a(bǔ)rr1重新整理為arr2

var arr1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15];
var arr2 = [[1, 2, 3, 4, 5, 6, 7, 8, 9, 10], [11, 12, 13, 14, 15]]

我目前想到的做法如下:

let arr = [];
let arr2 = [];
for(let i = 0,len = arr1.length; i < len; i++){
    arr.push(arr1[i]);
    if(i && i % 9 == 0){
        arr2.push(arr);
        arr = [];
        continue;
    }
    if(i == len - 1) arr2.push(arr);
}

不知是否有更為優(yōu)雅的寫法和思路?

回答
編輯回答
黑與白

let arr = [];
let arr2 = [];
for(let i = 0,j=0; i < arr.length; i++){

(j+1)*10 === i && j++
arr2[j].push(arr[i]);

}
瞎寫的

2017年2月14日 23:06
編輯回答
愛是癌

var arr1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15];
var arr2 = [];
while(arr1.length){

arr2.push(arr1.splice(0,10))

}

弊端:arr1被修改,看需求如果需要保留arr1 可先創(chuàng)建一個副本

2017年4月3日 02:02
編輯回答
離殤

兩種方式:

let arr1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15];
let arr2 = [];
for(let i = 0; i < Math.ceil(arr1.length / 10); i++) {
    arr2.push(arr1.slice(i * 10, i * 10 + 10));
}
let arr1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15];
let arr2 = [];
while(arr1.length > 0) {
    arr2.push(arr1.splice(0, 10));
}
2017年1月9日 03:35
編輯回答
魚梓

lodash一行搞定,沒有比這更優(yōu)雅的了:

var arr2 = _.chunk([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15], 10);
2017年12月16日 07:57
編輯回答
青裙

用slice創(chuàng)建副本的方式代替循環(huán)push操作

2018年5月18日 16:17
編輯回答
兔寶寶

用slice或者splice

2017年10月12日 21:34
編輯回答
小眼睛
var arr2 = arr1.reduce((a,b)=>(a[(b-1)/10>>0]=[...(a[(b-1)/10>>0] || []), b], a), [])
2018年2月20日 08:59
編輯回答
心上人
 function arrnum(arr,num){
             var myarr = [];
             for(var i=0;i<arr.length;i+=num){
                myarr.push(arr.slice(i,num+i));
             }
            return myarr;
         }  
        var arr2 = arrnum(arr1,10);
2017年6月13日 18:18
編輯回答
汐顏
var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
var copy = [...arr]
var result = []

while(copy.length) {
  result.push(copy.splice(0,10))
}
2017年6月29日 04:51
編輯回答
傲寒
var arr1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15];
var arr2 = [];
for(var i = 0;i < arr1.length / 10;i++)
    arr2.push(arr1.slice(10*i,10*(i+1)))
console.log(arr2)
2017年11月27日 15:11