请教,一维数组整理成二维数组如何编写代码更为优雅?

发布于 2022-09-06 08:35:26 字数 529 浏览 16 评论 0

因项目需要,现有一维数组需要重新按每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);
}

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(10

零度℉ 2022-09-13 08:35:26
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))
}
各自安好 2022-09-13 08:35:26

两种方式:

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));
}
演出会有结束 2022-09-13 08:35:26

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

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

}
瞎写的

末が日狂欢 2022-09-13 08:35:26

用slice或者splice

半寸时光 2022-09-13 08:35:26

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

浪推晚风 2022-09-13 08:35:26

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

恬淡成诗 2022-09-13 08:35:26
 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);
不及他 2022-09-13 08:35:26
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)
南烟 2022-09-13 08:35:26

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

var arr2 = _.chunk([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15], 10);
滥情空心 2022-09-13 08:35:26
var arr2 = arr1.reduce((a,b)=>(a[(b-1)/10>>0]=[...(a[(b-1)/10>>0] || []), b], a), [])
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文