12.03.2023, 12:47
|
Аспирант
|
|
Регистрация: 07.12.2022
Сообщений: 88
|
|
Помогите сравнить 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
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,126
|
|
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));
|
|
12.03.2023, 13:39
|
Аспирант
|
|
Регистрация: 07.12.2022
Сообщений: 88
|
|
Спасибо)
Скажи пожалуйста, а как сделать что бы Alert выдавал только name, а не "name" и "age"?
|
|
12.03.2023, 13:44
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,126
|
|
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
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,126
|
|
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));
|
|
12.03.2023, 14:29
|
Аспирант
|
|
Регистрация: 07.12.2022
Сообщений: 88
|
|
Отлично )
Спасибо)
Скажи пожалуйста я правильно понимаю этот скрипт сравнивает в равной мере массив1 и массив2 и если будут изменения в первом и во втором то он вытащит name и с первого и второго массива?
А возможно ли конкретно сравнить второй с первым и только показывать name с первого массива, а не с обоих?
Я надеюсь вы поняли мою мысль))))
|
|
12.03.2023, 14:35
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,126
|
|
Сообщение от 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));
|
|
12.03.2023, 14:44
|
Аспирант
|
|
Регистрация: 07.12.2022
Сообщений: 88
|
|
Красота)))
Благодарю тебя дружище)
|
|
12.03.2023, 15:15
|
Аспирант
|
|
Регистрация: 07.12.2022
Сообщений: 88
|
|
Скажи пожалуйста, а можно alert отменить, если ничего не нашлось по name?
Я такого типа alert написал
Alert(JSON.stringify("Добавить" + unique));
|
|
12.03.2023, 15:20
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,126
|
|
Сообщение от Aidec
|
можно alert отменить, если ничего не нашлось по name?
|
if(unique.length) alert(JSON.stringify(unique));
|
|
|
|