2016-05-24 112 views
1

我有兩個JSON數組:比較兩個不同長度的陣列和排除比賽

{"Array1":[ 
    { "_id": "1234"}, 
    { "_id": "5678"}, 
    { "_id": "3456"} ]} 

{"Array2":[ 
    { "_id": "1234"}, 
    { "_id": "5678"} ]} 

如何在node.js中比較兩個,返回僅從Array1的區別?

我已經嘗試以下操作:

if (Array1.every(function (u, i) { return u._id === Array2[i]._id;})) { 
    Array1.splice(i, 1); 
} 

回答

2

我不會爲篩選出相同_id S的任務使用Array.prototype.every,因爲這不是預期的功能。

相反,我建議你使用Array.prototype.filter方法,用Array.prototype.map一起,如下圖所示:

const obj1 = {"Array1":[ 
 
    { "_id": "1234"}, 
 
    { "_id": "5678"}, 
 
    { "_id": "3456"} ]}; 
 

 
const obj2 = {"Array2":[ 
 
    { "_id": "1234"}, 
 
    { "_id": "5678"} ]}; 
 

 

 
console.log(obj1.Array1.filter(a1 => obj2.Array2.map(a2 => a2._id).indexOf(a1._id) < 0));

ES5:

var obj1 = {"Array1":[ 
 
    { "_id": "1234"}, 
 
    { "_id": "5678"}, 
 
    { "_id": "3456"} ]}; 
 

 
var obj2 = {"Array2":[ 
 
    { "_id": "1234"}, 
 
    { "_id": "5678"} ]}; 
 

 

 
console.log(obj1.Array1.filter(function (a1) { 
 
    return obj2.Array2.map(function (a2) { 
 
    return a2._id; 
 
    }).indexOf(a1._id) < 0; 
 
}));

+0

正是我在找的,但是,我得到了我的node.js頁面上的lambda表達式的語法錯誤。 –

+0

@RudolfLamprecht是否使用節點v6.x?所有上面的代碼應該工作得很好,因爲ES6的覆蓋面現在非常好。 – timolawl

+0

@RudolfLamprecht我已經添加了ES5版本。應該沒有那個問題。 – timolawl