Задать вопрос
@ura2rist

Как в массиве объектов оставить только то, что есть в другом массиве?

['Заявка на редактирование сайта']
[
  {
    id: 1,
    name: 'Список пользователей',
    Parent_ID: 0,
    url: '/list-user'
  },
  {
    id: 2,
    name: 'Добавить пользователя',
    Parent_ID: 0,
    url: '/add-user'
  },
  {
    id: 3,
    name: 'Заявка на редактирование сайта',
    Parent_ID: 0,
    url: '/report-site'
  }
]

Нужно, чтобы в массиве остались только объекты, которые есть в другом массиве. Т.е, в данном случае нужно, чтобы остался только объект с неймом "Заявка на редактирование сайта". Как это сделать?
  • Вопрос задан
  • 174 просмотра
Подписаться 1 Простой Комментировать
Решения вопроса 1
0xD34F
@0xD34F Куратор тега JavaScript
Создать новый массив:

const newArr2 = arr2.filter(n => arr1.includes(n.name));

// или

const obj2 = arr2.reduce((acc, n) => (
  (acc[n.name] = acc[n.name] ?? []).push(n),
  acc
), {});
const newArr2 = arr1.flatMap(n => obj2[n] ?? []);

// или

const newArr2 = [];

for (const n of arr2) {
  for (const m of arr1) {
    if (m === n.name) {
      newArr2.push(n);
      break;
    }
  }
}

Удалить элементы существующего:

arr2.reduceRight((_, n, i, a) => ~arr1.indexOf(n.name) || a.splice(i, 1), null);

// или

arr2.splice(0, arr2.length, ...arr2.filter(function(n) {
  return this.has(n.name);
}, new Set(arr1)));

// или

arr2.length -= arr2.reduce((acc, n, i, a) => (
  a[i - acc] = n,
  acc + !arr1.includes(n.name)
), 0);
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
notiv-nt
@notiv-nt
Как ваше ничего? Да, моё тоже
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы