Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 12.03.2023, 12:47
Аспирант
Отправить личное сообщение для Aidec Посмотреть профиль Найти все сообщения от Aidec
 
Регистрация: 07.12.2022
Сообщений: 86

Помогите сравнить 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”}];




Есть у кого-нибудь варианты решения?
Ответить с цитированием
  #2 (permalink)  
Старый 12.03.2023, 13:13
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,070

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));
Ответить с цитированием
  #3 (permalink)  
Старый 12.03.2023, 13:39
Аспирант
Отправить личное сообщение для Aidec Посмотреть профиль Найти все сообщения от Aidec
 
Регистрация: 07.12.2022
Сообщений: 86

Спасибо)

Скажи пожалуйста, а как сделать что бы Alert выдавал только name, а не "name" и "age"?
Ответить с цитированием
  #4 (permalink)  
Старый 12.03.2023, 13:44
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,070

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));
Ответить с цитированием
  #5 (permalink)  
Старый 12.03.2023, 14:11
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,070

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));
Ответить с цитированием
  #6 (permalink)  
Старый 12.03.2023, 14:29
Аспирант
Отправить личное сообщение для Aidec Посмотреть профиль Найти все сообщения от Aidec
 
Регистрация: 07.12.2022
Сообщений: 86

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

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

Я надеюсь вы поняли мою мысль))))
Ответить с цитированием
  #7 (permalink)  
Старый 12.03.2023, 14:35
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,070

Сообщение от 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));
Ответить с цитированием
  #8 (permalink)  
Старый 12.03.2023, 14:44
Аспирант
Отправить личное сообщение для Aidec Посмотреть профиль Найти все сообщения от Aidec
 
Регистрация: 07.12.2022
Сообщений: 86

Красота)))
Благодарю тебя дружище)
Ответить с цитированием
  #9 (permalink)  
Старый 12.03.2023, 15:15
Аспирант
Отправить личное сообщение для Aidec Посмотреть профиль Найти все сообщения от Aidec
 
Регистрация: 07.12.2022
Сообщений: 86

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

Я такого типа alert написал
Alert(JSON.stringify("Добавить" + unique));
Ответить с цитированием
  #10 (permalink)  
Старый 12.03.2023, 15:20
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,070

Сообщение от Aidec
можно alert отменить, если ничего не нашлось по name?
if(unique.length)  alert(JSON.stringify(unique));
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите сравнить 2 массива! mazhaka Общие вопросы Javascript 2 21.12.2020 19:32
Сравнить данные из массива и таблицы, подсветить в таблице совпадающие данные nubie Элементы интерфейса 3 02.07.2019 20:53
Помогите , элементы массива по порядку из другого массива Rost_shat Javascript под браузер 9 28.07.2018 20:03
сравнить два массива Роман Андреевич Общие вопросы Javascript 2 04.10.2017 14:12
Динамическое значение (например длину массива) запись в постоянное Vulkan Общие вопросы Javascript 14 17.06.2010 16:13