我有一个数组:
var a = [{name : 'foo1'},{name : 'foo2'},{name : 'foo3'},{name : 'foo4'},{name : 'foo5'}]
如何从原始数组输出和数组如下所示?
[[{name : 'foo1'},{name : 'foo2'}],[{name : 'foo3'},{name : 'foo4'}],[{name : 'foo5'}]]
使用Array.prototype.map函数?感谢。
答案 0 :(得分:1)
使用地图和过滤器的解决方案:
var a = [{name : 'foo1'},{name : 'foo2'},{name : 'foo3'},{name : 'foo4'},{name : 'foo5'}];
var b = a.map(function(val, index, arr){
if (index % 2 === 0){
var pair = [val];
if (arr.length > index+1){
pair.push(arr[index+1]);
}
return pair;
} else {
return null;
}
}).filter(function(val){ return val; });
它将偶数项映射到2的数组,奇数项映射为null,然后过滤器删除空值。
答案 1 :(得分:0)
如果确实想要使用map
,请创建从0
到ceil(length/2)
的范围,并致电map
以获取2个元素每个(或最后一个为1或2):
Array.apply(null, Array(Math.ceil(a.length / 2))).map(function (_, i) {return i;}).map(
function(k) {
var item = [a[k*2]];
if (a.length - 1 >= k*2+1)
item.push(a[k*2+1]);
return item;
}
);
答案 2 :(得分:0)
forEach()
方法每个数组元素执行一次提供的函数。
var a = [{ name: 'foo1' }, { name: 'foo2' }, { name: 'foo3' }, { name: 'foo4' }, { name: 'foo5' }],
grouped = function (array) {
var r = [];
array.forEach(function (a, i) {
if (i % 2) {
r[r.length - 1].push(a);
} else {
r.push([a]);
}
}, []);
return r;
}(a);
document.write('<pre>' + JSON.stringify(grouped, 0, 4) + '</pre>');