Как l oop через массив чисел и сопоставить их с массивом объектов с одинаковым идентификатором - PullRequest
0 голосов
/ 13 февраля 2020
arr1:[1,4,5]
arr2:[
        { id: 1, title:'title', body:'body'},
        { id: 2, title:'title', body:'body'},
        { id: 3, title:'title', body:'body'},
        { id: 4, title:'title', body:'body'},
        { id: 5, title:'title', body:'body'},
        { id: 6, title:'title', body:'body'},
     ]

В React я пытаюсь получить весь объект arr2, если число из arr1 соответствует идентификатору объекта в arr2.

Итак, из этого примера я пытаюсь получить каждый объект из arr2 с идентификатором (1,4,5)

Ответы [ 4 ]

3 голосов
/ 13 февраля 2020

Вы должны отфильтровать arr2 по его идентификаторам.

  const arr1 = [1, 4, 5];
  const arr2 = [
    { id: 1, title: "title", body: "body" },
    { id: 2, title: "title", body: "body" },
    { id: 3, title: "title", body: "body" },
    { id: 4, title: "title", body: "body" },
    { id: 5, title: "title", body: "body" },
    { id: 6, title: "title", body: "body" }
  ];

  const result = arr2.filter(item => arr1.includes(item.id));

  console.log(result);
0 голосов
/ 13 февраля 2020

Позвольте мне включить здесь другое решение с комбинацией reduce() и find().

Array.prototype.reduce():

Метод Redu () выполняет функцию редуктора (которую вы предоставляете) для каждого элемента массива, в результате чего получается одно выходное значение.

Array.prototype.find():

Метод find () возвращает значение первого элемента в предоставленном массиве, который удовлетворяет предоставленной функции тестирования.

Попробуйте выполнить следующее:

const arr1 = [1,4,5];
const arr2 = [
  { id: 1, title:'title', body:'body'},
  { id: 2, title:'title', body:'body'},
  { id: 3, title:'title', body:'body'},
  { id: 4, title:'title', body:'body'},
  { id: 5, title:'title', body:'body'},
  { id: 6, title:'title', body:'body'},
];

const result = arr2.reduce((a, {id,body}) => {
  if (arr1.find(e => id === e)) a.push({id, body});
  return a;
}, []);

console.log(result);

Надеюсь, это поможет!

0 голосов
/ 13 февраля 2020

Вы можете использовать функцию Array.prototype.filter() вместе с функцией Array.prototype.includes, чтобы отфильтровать нужные объекты по id.

.

let arr1 = [1,4,5],
    arr2 = [{ id: 1, title:'title', body:'body'},{ id: 2, title:'title', body:'body'},{ id: 3, title:'title', body:'body'},{ id: 4, title:'title', body:'body'},{ id: 5, title:'title', body:'body'},{ id: 6, title:'title', body:'body'}],
    result = arr2.filter(({id}) => arr1.includes(id));
console.log(result);
0 голосов
/ 13 февраля 2020

Простой, отфильтруйте данные с соответствующим идентификатором из arr1

const arr1 =[1,4,5]
const arr2 =[
        { id: 1, title:'title', body:'body'},
        { id: 2, title:'title', body:'body'},
        { id: 3, title:'title', body:'body'},
        { id: 4, title:'title', body:'body'},
        { id: 5, title:'title', body:'body'},
        { id: 6, title:'title', body:'body'},
];

function findMatchData(sourceData, match) { 
  return sourceData.filter((current) => {
    return match.includes(current.id)
  });
}

console.log(findMatchData(arr2, arr1))

Надеюсь, это поможет вам!

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