首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从一维数组创建2d数组

从一维数组创建2d数组
EN

Stack Overflow用户
提问于 2016-08-20 18:19:10
回答 3查看 659关注 0票数 2

我对编程很陌生,我有一个任务要求从一个一维数组创建一个2d数组。我想到了这个(没有任何外部来源的帮助,因为它带走了学习经验)。它适用于我们的教授测试输入,我只是想知道这是不是一个丑陋/低效的解决方案。

代码语言:javascript
复制
function twoDArray(arr, lenSubArray) {
    var newArr = []; 
    var placeHolder = 0; 
    var leftOver = 0; 
    for (var i = 1; i < arr.length + 1; i++) {
        /* if i is a multiple of the specified sub-array size 
           then add the elements from placeHolder to i
        */
        if (i % lenSubArray === 0) {
            newArr.push(arr.slice(placeHolder, i)); 
            placeHolder += lenSubArray; 
            leftOver++; // tells us how many sub-arrays were created
        }
    }
    /* if original array is not divisible by the length of the specified sub-array
       then there will be left over values. Retrieve these values and create an 
       array out of them and add them to the 2d array.
    */
    if (!(arr.length % lenSubArray === 0)) {
         /* sub-array count multiplied by the length of each 
            sub-array gives us the right index to retrieve remaining values
        */
        leftOver = (leftOver * lenSubArray);
        newArr.push(arr.slice(leftOver))
    }

    return newArr; 
}

测试输入: twoDArray(1,2,3,4,5,3)输出为:[1,2,3,4,5]

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-08-20 18:31:14

你太复杂了:

  • 创建结果数组
  • 将切片从i推送到i+lenSubArray
  • 增量i ( lenSubArray )

而且slice足够聪明,能够正确地处理Array的末端

代码语言:javascript
复制
function twoDArray(arr, lenSubArray) {
  var i = 0, result = [];
  while(i < arr.length)
    result.push( arr.slice(i, i+=lenSubArray) );
  return result;  
}
票数 2
EN

Stack Overflow用户

发布于 2016-08-20 19:02:09

您可以使用Array#reduce并根据索引构建新的数组。

代码语言:javascript
复制
function twoDArray(array, length) {
    return array.reduce(function (r, a, i) {
        i % length ? r[r.length - 1].push(a) : r.push([a]);
        return r;
    }, []);
}

console.log(twoDArray([1, 2, 3, 4, 5], 3));

票数 1
EN

Stack Overflow用户

发布于 2016-08-20 18:31:32

您不需要对数组进行迭代。您可以使用Array.prototype.slice函数代替。

代码语言:javascript
复制
function twoDArray(a, b){
    return (Array(Math.ceil(a.length / b)) + '').split(',').map(function(c, d){
        return a.slice(b * d, b * (d + 1));
    });
}

这是你怎么称呼它的

代码语言:javascript
复制
var a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12];
console.log(twoDArray(a, 3));
// Output:
// [
//   [1, 2, 3],
//   [4, 5, 6],
//   [7, 8, 9],
//   [10, 11, 12]
// ]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39057351

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档