2016-07-28 29 views

回答

1

您可以通過比較內容的數據類型來分開數組,因爲{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]); 
} 
1
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); 
1

您可以使用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); 
0

您希望將源濾鏡陣列。

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捲餅的美味。 ;)

0

您可以使用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);