素材牛VIP会员
请教,一维数组整理成二维数组如何编写代码更为优雅?
 Ho***95  分类:JavaScript  人气:1241  回帖:10  发布于6年前 收藏

因项目需要,现有一维数组需要重新按每10个元素为一个数组整理成二维数组.
例如,把arr1重新整理为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);
}

不知是否有更为优雅的写法和思路?

讨论这个帖子(10)垃圾回帖将一律封号处理……

Lv6 码匠
st***en 交互设计师 6年前#1

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

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

}
瞎写的

Lv5 码农
龙***4 页面重构设计 6年前#2
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))
}
Lv6 码匠
pi***21 站长 6年前#3

用slice创建副本的方式代替循环push操作

Lv2 入门
钱***8 软件测试工程师 6年前#4

用slice或者splice

Lv3 码奴
随***火 站长 6年前#5
var arr2 = arr1.reduce((a,b)=>(a[(b-1)/10>>0]=[...(a[(b-1)/10>>0] || []), b], a), [])
Lv3 码奴
雨***梦 页面重构设计 6年前#6

lodash一行搞定,没有比这更优雅的了:

var arr2 = _.chunk([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15], 10);
Lv6 码匠
马***0 软件测试工程师 6年前#7

两种方式:

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));
}
Lv5 码农
星***屋 产品经理 6年前#8
 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);
Lv3 码奴
路***侠 JS工程师 6年前#9
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)
Lv6 码匠
zc***78 软件测试工程师 6年前#10

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 可先创建一个副本

 文明上网,理性发言!   😉 阿里云幸运券,戳我领取