2017-06-06 63 views
1

我試圖避免添加重複的對象到Angular2數組。例如,讓我們說我們有一個數組「汽車總動員」,我們把一個JSON對象,數組,可能是這樣的:Angular2避免添加重複的JSON對象到數組

{ 
"brand": "Acura" 
"engine": "2.4L" 
+ others details 
} 

我們可以不斷加入汽車行駛到陣列。我的問題是現在如何避免再次將同一輛車添加到陣列中。如果我要添加與上述相同的JSON,則不應添加它。我是否必須遍歷數組中的所有現有對象並比較JSON的每個字段?這聽起來像是一個昂貴的操作,或者是有一些更優雅/更快的方法?

謝謝!

回答

0

你需要找到或創建在列表中的項目獨特的屬性,那麼您可以使用類似lodash查詢數組,由物業,看看是否能項目列表中已經存在,你加入之前它。

來自實例Lodash網站

var users = [ 
    { 'user': 'barney', 'active': false }, 
    { 'user': 'fred', 'active': false }, 
    { 'user': 'pebbles', 'active': true } 
]; 

// The `_.matches` iteratee shorthand. 
_.findIndex(users, { 'user': 'fred', 'active': false }); 
+0

甜的感謝!我爲每個JSON對象添加了一個UUID,並使用了以下方法: if((_.findIndex(this.cars,{「id」:car.id}))== -1){this.skind.push(汽車) } – vgogov

+0

此解決方案是否仍然遍歷集合? –

+0

除了@FrankModica:你爲什麼建議使用lodash,而他本來可以使用完全相同的功能? 'users.findIndex(user => user.id === )'。或者甚至是傳統的'indexOf' ... – developer033

4

如果每輛汽車有什麼獨特之處(如一個ID),你可以使用一個對象而不是數組:

var map = { }; 

function add(car) { 
    if (map[car.id]) { 
     return; 
    } 

    map[car.id] = car; 
} 

你的ID可能是別的東西獨一無二的,喜歡的品牌的組合和年或類似的東西。

map[car.brand + car.year] = car