2016-05-24 95 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