Вытащить определенные элементы из двух массивов в отдельный массив - PullRequest
0 голосов
/ 19 октября 2019

Я хочу сравнить два массива по имени и извлечь из второго (newLogins) только те, у которых значение логина больше первого (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);

Я хочу получить такой вывод:

        const whoIsLogin = [
            { name: 'Bob', login: 1 },
            { name: 'Sveta', login: 2 },
        ];

Как я могу это сделать? Спасибо!

Ответы [ 3 ]

0 голосов
/ 19 октября 2019

Я только что обновил вашу логику с помощью метода find.

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);
0 голосов
/ 19 октября 2019

Вы можете проверить это

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)
0 голосов
/ 19 октября 2019

Вы можете взять Map и отфильтровать второй массив.

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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...