Javascript 将对象数组合并到每个包含3个对象的数组数组中

Javascript 将对象数组合并到每个包含3个对象的数组数组中,javascript,algorithm,Javascript,Algorithm,我有以下包含许多对象的JavaScript数组: [ {...}, {...}, {...}, . . . . . {...}, {...} ] 我想将数组转换为包含3个对象的行,如下所示: [ [ {...}, {...}, {...} ], [ {...}, {...}, {...} ], [ {...}, {...}, {...} ], . . . [

我有以下包含许多对象的JavaScript数组:

[
    {...},
    {...},
    {...},
    .
    .
    .
    .
    .
    {...},
    {...}
]
我想将数组转换为包含3个对象的行,如下所示:

[
    [ {...}, {...}, {...} ],
    [ {...}, {...}, {...} ],
    [ {...}, {...}, {...} ],
    .
    .
    .
    [ {...}, {...}, {...} ],
    [ {...}, {...}, {...} ]
]

最好的方法是什么?

使用
for
循环:

var i = 0
  , n = data.length
  , result = [];

for (; i < n; i += 3) {
  result.push([data[i], data[i + 1], data[i + 2]]);
}
var i=0
,n=data.length
,结果=[];
对于(;i
您可以通过循环来完成。这将获取数组
,并创建数组
结果

var result = [];
var line;
for (var i = 0; i < items.length; i++) {
  if (i % 3 == 0) {
    line = [];
    result.push(line);
  }
  line.push(items[i]);
}
var结果=[];
var线;
对于(变量i=0;i
(即使源数组不能被3整除,这种循环方式仍然有效。)

还有另一个片段(改编自@Florent)

只是另一种选择:)


你知道这样做的方法吗?想知道哪种方法是最好的,还是你不知道这样做的方法?你会用什么标准来决定每个对象应该进入哪个数组?@Renato Lochetti:我总是可以用for语句和循环来做。我正在寻找的efficiect和lesdd代码尽可能。也许数组中有任何隐藏函数可以做我不知道的事情。@jalynn2:我没有条件,每3个对象应该在一行中。我需要将数组转换成网格。就渐近时间而言,你总是需要对整个向量进行迭代。只是一个循环,一次得到三个。继续。。。逗号。。阿格尔。。信息技术伤害。。。我的。。眼睛。。啊+不管怎样,我已经搞定了。顺便说一句通过调用
Array.prototype.splice
而不是使用偏移量
i+n
,代码可以得到改进。最后一行可能包含未定义的数据长度,其中数据长度未被划分为bt 3。根据OP的问题,我假设
data.length%3==0
建议的结果数组表明:如果最后一行是不是除以3。@Naor:是的,是的。行在创建后立即被推送到数组中,而不是在填充了项目之后。如果data.length%3 0呢?@Naor:那么,此代码将贪婪地从目标数组中获取3个项目,并将它们写入
结果中。如果少于3个,它会拿走剩下的任何东西。它是有缺陷的,用
.push
而不是
.concat
var result = [];

do {
   result.push( data.splice( 0, 3 ) )
} while( data.length );
var result = arr.reduce(
    function(prev, curr, index) { 
        if(index > 1) { 
            if(prev[prev.length-1].length == 3) 
                prev.push([]); 
            prev[prev.length-1].push(curr); 
            return prev; 
        }
        return [[prev, curr]]; 
    }
);