Помогите сравнить 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”}]; Есть у кого-нибудь варианты решения? |
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)); |
Спасибо)
Скажи пожалуйста, а как сделать что бы Alert выдавал только name, а не "name" и "age"? |
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)); |
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)); |
Отлично )
Спасибо) Скажи пожалуйста я правильно понимаю этот скрипт сравнивает в равной мере массив1 и массив2 и если будут изменения в первом и во втором то он вытащит name и с первого и второго массива? А возможно ли конкретно сравнить второй с первым и только показывать name с первого массива, а не с обоих? Я надеюсь вы поняли мою мысль)))) |
Цитата:
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)); |
Красота)))
Благодарю тебя дружище) |
Скажи пожалуйста, а можно alert отменить, если ничего не нашлось по name?
Я такого типа alert написал Alert(JSON.stringify("Добавить" + unique)); |
Цитата:
if(unique.length) alert(JSON.stringify(unique)); |
Часовой пояс GMT +3, время: 16:56. |