简体   繁体   中英

Pull out certain elements from two arrays into a separate array

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM