Фильтрация массива в JS

104
12 ноября 2019, 02:10

Есть два массива:

const arr1 = [{ 
  id: '1', 
  name: 'arr 1 name 1' 
}, { 
  id: '2', 
  name: 'arr 1 name 2' 
}, { 
  id: '3', 
  name: 'arr 1 name 3' 
}]; 
 
const arr2 = [{ 
  id: '3', 
  name: 'arr 2 name 3' 
}, { 
  id: '4', 
  name: 'arr 2 name 4' 
}, { 
  id: '5', 
  name: 'arr 2 name 5' 
}]; 
 
const arr3 = arr1.filter((el) => el.id === arr2.map((el) => el.id)); 
 
console.log(arr3);

Нужно отфильтровать из arr1 только те объекты, которые совпадают по id с arr2. И результат этой фильтрации положить в arr3. Можно это как-то сделать, желательно без цикла? В данном примере должно вывести только id: '3', т.к. он совпадает. Но почему-то он его туда не включает...

Answer 1

Почитать про some: https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Global_Objects/Array/some

const arr1 = [{ 
  id: '1', 
  name: 'arr 1 name 1' 
}, { 
  id: '2', 
  name: 'arr 1 name 2' 
}, { 
  id: '3', 
  name: 'arr 1 name 3' 
}]; 
 
const arr2 = [{ 
  id: '3', 
  name: 'arr 2 name 3' 
}, { 
  id: '4', 
  name: 'arr 2 name 4' 
}, { 
  id: '5', 
  name: 'arr 2 name 5' 
}]; 
 
// Используем some вместо map 
const arr3 = arr1.filter((el) => arr2.some((el2) => el2.id === el.id)); 
 
console.log(arr3);

READ ALSO
не работает overflow:hidden у body и html на iPhone

не работает overflow:hidden у body и html на iPhone

есть событие на открытие модального окнапри открытии окна у html и body должен блокироваться скролл (используем overflow:hidden), но он не работает именно...

105
Promise в цикле при запросах из бд

Promise в цикле при запросах из бд

Есть метод в классе, который должен достать из базы данных из одной таблицы текущее значение проектов, из другой таблицы их историю в разбивке...

123
Регулярное выражение - цифры и дефис [закрыт]

Регулярное выражение - цифры и дефис [закрыт]

Подскажите регулярку такого вида:

118
Как сравнить два списка javascript?

Как сравнить два списка javascript?

Как сравнить два списка? И вывести отсутствующий элемент?

79