Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Помогите сравнить 2 массива по ключу и вывести уникальное значение (https://javascript.ru/forum/misc/85030-pomogite-sravnit-2-massiva-po-klyuchu-i-vyvesti-unikalnoe-znachenie.html)

Aidec 12.03.2023 12:47

Помогите сравнить 2 массива по ключу и вывести уникальное значение
 
У меня есть два массива такого плана
Mas1 = [{name: “Anton”, age: “20”}, {name: “Artem”, age: “23”}, {name: “Rafik”, age: “32”}];

Mas2= [{name: “Anton”, age: “20”}, {name: “Andrey”, age: “40”}, {name: “Artem”, age: “23”}, {name: “Rafik”, age: “32”}];


Нужно их сравнить по ключу “name”
И такой ответ должен получится-
Mas3= [{name: “Andrey”, age: “40”}];




Есть у кого-нибудь варианты решения?

рони 12.03.2023 13:13

Aidec,
const Mas1 = [{name: "Anton", age: "20"}, {name: "Artem", age: "23"}, {name: "Rafik", age: "32"}];
const nameMas1 = Mas1.map(({name}) => name);
const Mas2= [{name: "Anton", age: "20"}, {name: "Andrey", age: "40"}, {name: "Artem", age: "23"}, {name: "Rafik", age: "32"}];
const nameMas2 = Mas2.map(({name}) => name); 
const filterMas1 = Mas1.filter(({name}) => !nameMas2.includes(name));
const filterMas2 = Mas2.filter(({name}) => !nameMas1.includes(name));
const unique = filterMas1.concat(filterMas2);
alert(JSON.stringify(unique));

Aidec 12.03.2023 13:39

Спасибо)

Скажи пожалуйста, а как сделать что бы Alert выдавал только name, а не "name" и "age"?

рони 12.03.2023 13:44

Aidec,
:-?
const Mas1 = [{name: "Anton", age: "20"}, {name: "Artem", age: "23"}, {name: "Rafik", age: "32"}];
const nameMas1 = Mas1.map(({name}) => name);
const Mas2= [{name: "Anton", age: "20"}, {name: "Andrey", age: "40"}, {name: "Artem", age: "23"}, {name: "Rafik", age: "32"}];
const nameMas2 = Mas2.map(({name}) => name);
const filterMas1 = nameMas1.filter(name => !nameMas2.includes(name));
const filterMas2 = nameMas2.filter(name => !nameMas1.includes(name));
const unique = filterMas1.concat(filterMas2);
alert(JSON.stringify(unique));

рони 12.03.2023 14:11

Aidec,
:)
function uniqueArr(a, b, key) {
            [a, b] = [a, b].map(k => k.map(a => a[key]));
            return a.filter(a => !b.includes(a)).concat(b.filter(b => !a.includes(b)))
        }
        const Mas1 = [{
            name: "Anton",
            age: "20"
        }, {
            name: "Artem",
            age: "23"
        }, {
            name: "Rafik",
            age: "32"
        }];
        const Mas2 = [{
            name: "Anton",
            age: "20"
        }, {
            name: "Andrey",
            age: "40"
        }, {
            name: "Artem",
            age: "23"
        }, {
            name: "Rafik",
            age: "32"
        }];
        let unique = uniqueArr(Mas1, Mas2, 'name');
        alert(JSON.stringify(unique));
        unique = uniqueArr(Mas1, Mas2, 'age');
        alert(JSON.stringify(unique));

Aidec 12.03.2023 14:29

Отлично )
Спасибо)

Скажи пожалуйста я правильно понимаю этот скрипт сравнивает в равной мере массив1 и массив2 и если будут изменения в первом и во втором то он вытащит name и с первого и второго массива?
А возможно ли конкретно сравнить второй с первым и только показывать name с первого массива, а не с обоих?

Я надеюсь вы поняли мою мысль))))

рони 12.03.2023 14:35

Цитата:

Сообщение от Aidec
сравнить второй с первым

function uniqueArr(a, b, key) {
            [a, b] = [a, b].map(k => k.map(a => a[key]));
            return b.filter(b => !a.includes(b))
        }
        const Mas1 = [{
            name: "Anton",
            age: "20"
        }, {
            name: "Artem",
            age: "23"
        }, {
            name: "Rafik",
            age: "32"
        }];
        const Mas2 = [{
            name: "Anton",
            age: "20"
        }, {
            name: "Andrey",
            age: "40"
        }, {
            name: "Artem",
            age: "23"
        }, {
            name: "Rafik",
            age: "32"
        }];
        let unique = uniqueArr(Mas1, Mas2, 'name');
        alert(JSON.stringify(unique));
        unique = uniqueArr(Mas1, Mas2, 'age');
        alert(JSON.stringify(unique));

Aidec 12.03.2023 14:44

Красота)))
Благодарю тебя дружище)

Aidec 12.03.2023 15:15

Скажи пожалуйста, а можно alert отменить, если ничего не нашлось по name?

Я такого типа alert написал
Alert(JSON.stringify("Добавить" + unique));

рони 12.03.2023 15:20

Цитата:

Сообщение от Aidec
можно alert отменить, если ничего не нашлось по name?

if(unique.length)  alert(JSON.stringify(unique));


Часовой пояс GMT +3, время: 16:56.