2013-10-16 61 views
0

我有兩個數組包含一些對象,我需要知道如何組合它們並排除任何重複。 (例如,包含從第二陣列apple: 222對象應該被排除在外,如果它已經在第一陣列中的存在。)Javascript數組檢查和組合

檢查下面:

var arr1 = [ 
    {apple: 111, tomato: 55}, 
    {apple: 222, tomato: 55} 
] 

var arr2 = [ 
    {apple: 222, tomato: 55}, 
    {apple: 333, tomato: 55} 
] 

我想要的結果是這樣的:

var res = [ 
    {apple: 111, tomato: 55}, 
    {apple: 222, tomato: 55}, 
    {apple: 333, tomato: 55} 
] 

我該怎麼做在JavaScript?

+0

這些「內部數組」是javascript對象,FWIW。 – Andy

+0

請發佈數組字面值(而不是PHP) – Prinzhorn

+0

您的數組以'('開始並以'}'結束??? – pbenard

回答

1

此解決方案是否符合您的需求(demo)?

var res, i, item, prev; 

// merges arrays together 
res = [].concat(arr1, arr2); 

// sorts the resulting array based on the apple property 
res.sort(function (a, b) { 
    return a.apple - b.apple; 
}); 

for (i = res.length - 1; i >= 0; i--) { 
    item = res[i]; 

    // compares each item with the previous one based on the apple property 
    if (prev && item.apple === prev.apple) { 

     // removes item if properties match 
     res.splice(i, 1); 
    } 
    prev = item; 
} 
1

您可以編寫重複數據刪除功能。

if (!Array.prototype.dedupe) { 
    Array.prototype.dedupe = function (type) { 
    for (var i = 0, l = this.length - 1; i < l; i++) { 
     if (this[i][type] === this[i + 1][type]) { 
     this.splice(i, 1); 
     i--; l--; 
     } 
    } 
    return this; 
    } 
} 

function combine(arr1, arr2, key) { 
    return arr1 
    .concat(arr2) 
    .sort(function (a, b) { return a[key] - b[key]; }) 
    .dedupe(key); 
} 

var combined = combine(arr1, arr2, 'apple'); 

Fiddle