Javascript从2个数组中返回数组,删除重复项

The*_*rus 4 javascript arrays duplicates javascript-objects ecmascript-6

搜索和尝试,到目前为止没有运气。

var newUsers = [{name: 'rich', id: 25}, {name: 'lauren', id: 35}, {name: 'dave', id: 28} ]

var likedUsers = [{name: 'derek', id: 39}, {name: 'rich', id: 25}, {name: 'brian', id: 38} ]
Run Code Online (Sandbox Code Playgroud)

我想要返回的是:

var leftUsers = [{name: 'lauren', id: 35}, {name: 'dave', id: 28} ]
Run Code Online (Sandbox Code Playgroud)

基本上没有rich对象,因为这是重复的。我只关心id钥匙。

我试过了:

newUsers.forEach((nUser) => {
    likedUsers.forEach((lUser) => {
        if (nUser.id !== lUser.id){
            leftUsers.push(nUser)
        }
    })
})
Run Code Online (Sandbox Code Playgroud)

但显然这行不通,因为这只会在它们不匹配时立即添加它们。

如果可能,想要使用 forEach/map/filter 的 es6 解决方案

谢谢

Fal*_*aly 5

随着array.prototype.filter过滤掉存在于项目likedUsersarray.prototype.findIndex检查存在,它应该是:

var newUsers = [{name: 'rich', id: 25}, {name: 'lauren', id: 35}, {name: 'dave', id: 28} ];
var likedUsers = [{name: 'derek', id: 39}, {name: 'rich', id: 25}, {name: 'brian', id: 38} ];

var leftUsers = newUsers.filter(u => likedUsers.findIndex(lu => lu.id === u.id) === -1);

console.log(leftUsers);
Run Code Online (Sandbox Code Playgroud)