找出两个数组之间的差异

use*_*542 2 html javascript arrays lodash

我有以下 Plunkr,它工作得很好。

https://plnkr.co/edit/WDjoEK7bAVpKSJbAmB9D?p=preview

它使用 lodash 的 _.differenceWith() 函数,将两个数组中不包含的所有数组值按顺序保存。

var result = _.differenceWith(data, test, _.isEqual);
Run Code Online (Sandbox Code Playgroud)

现在我有两个问题:

1.) 在我们的项目中,我们使用较旧的 Lodash 版本,其中未实现功能 differenceWith

2.) 我只需要比较数组的一个值。这当前比较完整的对象。我只需要比较 id 属性。

sty*_*fle 5

这将根据属性找到arr1不在其中的对象。arr2id

var arr1 = [ { "id": "1" }, { "id": "2" }, { "id": "3" } ];
var arr2 = [ { "id": "1" }, { "id": "2" } ];
var result = arr1.filter(o1 => arr2.filter(o2 => o2.id === o1.id).length === 0);
console.log(result);
Run Code Online (Sandbox Code Playgroud)

请注意,此示例不需要 lodash。

如果要使用不同的比较而不是id,可以将o2.id === o1.id部件更改为不同的属性。

这是一个更通用的解决方案:

var arr1 = [ { "name": "a" }, { "name": "b" }, { "name": "c" } ];
var arr2 = [ { "name": "a" }, { "name": "c" } ];
function differenceWith(a1, a2, prop) {
    return a1.filter(o1 => a2.filter(o2 => o2[prop] === o1[prop]).length === 0);
}
var result = differenceWith(arr1, arr2, 'name');
console.log(result);
Run Code Online (Sandbox Code Playgroud)