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

Как красиво выбрать элементы из массива по второму массиву?

Есть ли какой-то one-liner чтобы выбрать из массива только те элементы, которые содержатся во втором массиве?

const tags = [
  {
    id: 1,
    name: 'one'
  },
  {
    id: 2,
    name: 'two'
  },
  {
    id: 3,
    name: 'three'
  },
  {
    id: 4,
    name: 'four'
  }
]

const active = [
  {
    name: 'one'
  },
  {
    name: 'four'
  }
]
  • Вопрос задан
  • 122 просмотра
Подписаться 1 Простой Комментировать
Решения вопроса 1
0xD34F
@0xD34F Куратор тега JavaScript
Делаем просто:

const result = tags.filter(n => active.some(m => m.name === n.name));

Делаем сложно:

function intersection(data1, data2, key = n => n) {
  const result = [];
  const getKey = key instanceof Function ? key : n => n[key];
  const keys = new Set(Array.from(data2, getKey));

  for (const n of data1) {
    if (keys.has(getKey(n))) {
      result.push(n);
    }
  }

  return result;
}

// ваш случай
const result = intersection(tags, active, 'name');

// есть и другие варианты применения
intersection([ 69, 187, 666 ], [ 0, 1, 2, 3, 187 ]) // [187]
intersection(Array(10).keys(), Array(3).keys()) // [0, 1, 2]
intersection('aBCdE', 'bDfHj', n => n.toLowerCase()) // ['B', 'd']
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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