[英]Javascript create a two dimensional array from one dimensional array using map
我有一個數組:
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函數? 謝謝。
使用地圖和過濾器的解決方案:
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,然后過濾器將擺脫null。
如果您確實想使用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;
}
);
Array#forEach()
解決方案
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>');
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.