假設我有像a=[1,3,4,{roll:3},7,8,{roll:2},9]
陣列,我想兩個陣列具有以下內容:的JavaScript - 單獨的混合陣列分成適當類型
b=[1,3,4,7,8,9]
c=[{roll:3},{roll:2}]
。
如何分開數組的內容?
假設我有像a=[1,3,4,{roll:3},7,8,{roll:2},9]
陣列,我想兩個陣列具有以下內容:的JavaScript - 單獨的混合陣列分成適當類型
b=[1,3,4,7,8,9]
c=[{roll:3},{roll:2}]
。
如何分開數組的內容?
您可以通過比較內容的數據類型來分開數組,因爲{roll:2}
的類型爲object
,數字類型爲number
。
var numbers = [];
var rolls = [];
for (var i = 0; i < a.length; i++) {
if (typeof a[i] === 'object')
rolls.push(a[i]);
else
numbers.push(a[i]);
}
var a=[1,3,4,{roll:3},7,8,{roll:2},9];
var numbers = [];
var objs = [];
for(var item in a)
{
if(typeof a[item] !== 'number')
{
objs.push(a[item]);
}
else{
numbers.push(a[item]);
}
}
console.log (numbers);
console.log(obj);
您可以使用JavaScript陣列reduce功能類似下面
var a = [1, 3, 4, {
roll: 3
}, 7, 8, {
roll: 2
}, 9];
var result = a.reduce(function(res, item) {
if (typeof item === 'object') {
res.c.push(item);
} else {
res.b.push(item);
}
return res;
}, {
b: [],
c: []
});
console.log(result.b);
console.log(result.c);
您希望將源濾鏡陣列。
var a = [ 1 , 3 , 4 , {roll:3} , 7 , 8 , {roll:2} , 9 ];
var b = a.filter(function(element) { return Number(element) === element; });
var c = a.filter(function(element) { return Number(element) !== element; });
的關鍵是如何將兩種陣列中的項目的區分:我以前就可以把測試轉述爲「如果該元素轉換爲一數產生元件本身,它是一個數字」。在javascript中進行類型檢測是一個着名的項目,我不會在這裏討論它。請參閱道格拉斯克羅克福德的Javascript:好的部分關於該主題的擴展討論,以及優秀的示例代碼。根據您期望在陣列中找到的元素種類,您可能需要選擇更精細的鑑別器。你可以很容易地在瀏覽器的javascript控制檯中測試這些東西。我這樣做是爲了驗證我的測試:
> Number(4) === 4
< true
-
這種方法迭代源陣列的兩倍以上。如果你關心性能 - 如果源數組中有成千上萬的項目,這隻會是一個問題,或者如果你的測試非常昂貴 - 那麼你可以用測試每個項目的forEach
完成相同的結果,將其附加到兩個輸出數組中的一個(或發出類似{ numbers: [], items: {}}
之類的reduce
)。
-
META:您的標題不是很好。如果你沒有在你的問題上付出一些努力,你就不應該期望在答案中付出很多努力。我們都在做我們的chipotle捲餅的美味。 ;)
您可以使用Array#forEach
的單個循環,並根據元素的類型進行推送。
var a = [1, 3, 4, { roll: 3 }, 7, 8, { roll: 2 }, 9],
b = [],
c = [];
a.forEach(function (el) {
(typeof el === 'object' ? c : b).push(el);
});
console.log(b);
console.log(c);
你應該有更好的標題,你嘗試的東西嗎? –