I want to compare two arrays by name and pull out of the second one(newLogins) only those with login value greater than the first one(oldLogins).
const oldLogins = [
{ name: 'Anna', login: 0 },
{ name: 'Bob', login: 0 },
{ name: 'Sveta', login: 0 },
];
const newLogins = [
{ name: 'Romeo', login: 1 },
{ name: 'Bob', login: 1 },
{ name: 'Sveta', login: 2 },
{ name: 'Jhon', login: 0 },
];
// Thought it would work..
const whoIsLogin = oldLogins.filter(function(item) {
return newLogins[item.name].login > item.login;
});
console.log(whoIsLogin);
I want to get that conclusion:
const whoIsLogin = [
{ name: 'Bob', login: 1 },
{ name: 'Sveta', login: 2 },
];
How can I do that? Thank you!
You could take a Map
and filter the second array.
var oldLogins = [{ name: 'Anna', login: 0 }, { name: 'Bob', login: 0 }, { name: 'Sveta', login: 0 }], newLogins = [{ name: 'Romeo', login: 1 }, { name: 'Bob', login: 1 }, { name: 'Sveta', login: 2 }, { name: 'Jhon', login: 0 }], map = oldLogins.reduce((m, { name, login }) => m.set(name, login), new Map), result = newLogins.filter(({ name, login }) => login > map.get(name)); console.log(result);
I have just updated your logic with find method.
const oldLogins = [ { name: 'Anna', login: 0 }, { name: 'Bob', login: 0 }, { name: 'Sveta', login: 0 }, ]; const newLogins = [ { name: 'Romeo', login: 1 }, { name: 'Bob', login: 1 }, { name: 'Sveta', login: 2 }, { name: 'Jhon', login: 0 }, ]; // It should work now const whoIsLogin = newLogins.filter(function(item) { const oldLogin = oldLogins.find(oItem=>oItem.name===item.name) return oldLogin && oldLogin.login < item.login; }); console.log(whoIsLogin);
you can check this
const oldlogins =[ {name:"Anna",login:0},{name:"Bob",login:0},{name:"Sb",login:0} ] const newlogins =[ {name:"rom",login:1},{name:"Bob",login:1},{name:"Sb",login:2},{name:"Jhon",login:0} ] let result =newlogins.filter((nitem,nindex)=>oldlogins.length-1>=nindex&&oldlogins[nindex].name===nitem.name&&oldlogins.length-1>=nindex&&oldlogins[nindex].login<nitem.login) console.log(result)
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.