хочу получить те элементы из первого массива которые и есть во втором массиве
мой 1 массив
const array = [
{ id: 'UPLAND', name: 'Суходол' },
{ id: 'SWAMP12', name: 'Болото I, II' },
{ id: 'SWAMP3', name: 'Болото III' },
{ id: 'MMG', name: 'ММГ' },
{ id: 'FLOODPLAIN', name: 'Пойма' },
];
мой 2 массив
const array2 = [{ Суходол: 100 }, { ММГ: 50 }];
я должен получить новый такой массив
const array3 = [
{ id: 'UPLAND', label: 'Суходол', pacent:100 },
{ id: 'MMG', label: 'ММГ', pacent:50 },
]
Я пробовал сделать через filter но не получилось
const newFilter = array.filter((arr, index) => {
let array3 = [];
const array2Keys = Object.keys(array2);
const array2Values = Object.values(array2);
array2Keys.map((arr2) => {
if (arr.name === arr2) {
return array3.push({
label:arr2,
pacent:
});
}
});
});
Ответы (2 шт):
Автор решения: ksa
→ Ссылка
получить те элементы из первого массива которые и есть во втором
Можно использовать вот такой вариант решения...
const array = [
{ id: 'UPLAND', name: 'Суходол' },
{ id: 'SWAMP12', name: 'Болото I, II' },
{ id: 'SWAMP3', name: 'Болото III' },
{ id: 'MMG', name: 'ММГ' },
{ id: 'FLOODPLAIN', name: 'Пойма' },
];
const array2 = [{ Суходол: 100 }, { ММГ: 50 }];
let arr = array2.reduce((m, o) => {
const k = Object.keys(o)[0]
m.set(k, o[k])
return m
}, new Map())
arr = array.reduce((a, {id, name}) => {
if (arr.has(name)) a.push({id, label: name, pacent: arr.get(name)})
return a
}, [])
console.log(arr)
Автор решения: anton
→ Ссылка
Функциональное решение:
const array = [
{ id: 'UPLAND', name: 'Суходол' },
{ id: 'SWAMP12', name: 'Болото I, II' },
{ id: 'SWAMP3', name: 'Болото III' },
{ id: 'MMG', name: 'ММГ' },
{ id: 'FLOODPLAIN', name: 'Пойма' },
];
const array2 = [{ Суходол: 100 }, { ММГ: 50 }];
const array3 = array2
.map(x => ({
id: array.filter(y => y.name === Object.keys(x)[0])[0].id,
label: Object.keys(x)[0],
percent: Object.values(x)[0]}));
console.log(array3);