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