Javascript returns an array of 2 arrays, removing duplicates

Searched and tried and no luck so far.

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} ]

I want to return:

var leftUsers = [{name: 'lauren', id: 35}, {name: 'dave', id: 28} ]

mostly without an object rich, as this is a duplicate. I'm only interested in the key id.

I tried:

newUsers.forEach((nUser) => {
    likedUsers.forEach((lUser) => {
        if (nUser.id !== lUser.id){
            leftUsers.push(nUser)
        }
    })
})

but obviously this will not work, as it will just add them all as soon as they do not match.

if possible es6 solution using forEach / map / filter would be useful

thank

+4
source share
4 answers

C array.prototype.filter, in order to filter out the elements existing in likedUsersand array.prototype.findIndexto check for existence, it should be:

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
+2
source

filter() some().

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} ]

const result = newUsers.filter(e => !likedUsers.some(a => a.id == e.id));
console.log(result)
+2

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( item => !likedUsers.find(item2 => item.id == item2.id));

console.log(leftusers);
0
source

You can create a Set of identifiers found in likedUsers, and a filter newUsers , checking if the identifier is in Set:

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

const result = newUsers.filter(function({ id }) {
  return !this.has(id) // take all users which ids is not found in the set
}, new Set(likedUsers.map(({ id }) => id))) // create a set of ids in likedUsers and assign to this

console.log(result)
Run code
0
source

Source: https://habr.com/ru/post/1692965/


All Articles