Как собрать массив из двух других массивов по совпадению id?

Суть вопроса: есть массив данных arr содержащий Ids (числа) которые так же содержатся в массиве data (data[n].values.Ids)

надо собрать массив который содержал бы title и Id того values, в чьем Ids найдено совпадение с массивом arr.
Иными словами получить title тех объектов чьи Ids содержатся в массиве arr.
const data = [
  {
      "id": 0,
      "name": "test1",
      "values": [
          {
              "id": 10249096,
              "title": "название1",
              "Ids": [
                  32007,
                  16077,
              ]
          },
          {
              "id": 10249097,
              "title": "название2",
              "Ids": [
                  19327,
                  35999,
                  36006,
              ]
          },
          {
              "id": 10249100,
              "title": "название3",
              "Ids": [
                  41112,
                  41096,
                  41115,
              ]
          }

      ]
  }
]


массив содержащий необходимые Ids.
const arr = [ 41112, 41096, 19327]

В результате должен получиться ответ типа

const result = [{id": 10249100, title": "название3}, {id": 10249097, title": "название2}]
  • Вопрос задан
  • 98 просмотров
Решения вопроса 1
0xD34F
@0xD34F Куратор тега JavaScript
const result = data
  .flatMap(n => n.values)
  .filter(n => n.Ids.some(m => arr.includes(m)))
  .map(({ id, title }) => ({ id, title }));

или

const inArr = Set.prototype.has.bind(new Set(arr));
const data.reduce((acc, { values }) => (
  values.forEach(({ Ids, ...n }) => Ids.some(inArr) && acc.push(n)),
  acc
), []);
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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