хочу получить те элементы из первого массива которые и есть во втором массиве

Рейтинг: 0Ответов: 2Опубликовано: 30.05.2023

мой 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:
      });
    }
  });
});

Ответы

▲ 1

получить те элементы из первого массива которые и есть во втором

Можно использовать вот такой вариант решения...

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)

▲ 1

Функциональное решение:

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);