Сравните два массива и добавьте новый флаг - PullRequest
0 голосов
/ 04 октября 2019

У меня есть два массива с одинаковой структурой.

Я должен сравнить их, и если в первом массиве найден элемент из второго массива (по id), я должен установить флаг isNew true - иначе false .

const arr1 = [
    {
        id: 1,
        text: 'Text 1'
    },
    {
        id: 2,
        text: 'Text 2'
    },
    {
        id: 3,
        text: 'Text 3'
    }
];

const arr2 = [
    {
        id: 2,
        text: 'Text 2'
    }
];

const result = [
    {
        id: 1,
        text: 'Text 1',
        isNew: false
    },
    {
        id: 2,
        text: 'Text 2',
        isNew: true
    },
    {
        id: 3,
        text: 'Text 3',
        isNew: false
    }
];

Ответы [ 2 ]

3 голосов
/ 04 октября 2019

Вы можете легко сделать это, комбинируя map и find:

result = arr1.map(el => {
    if (arr2.find(el2 => el.id === el2.id) {
        el.isNew = true;
    }
    return el;
}
1 голос
/ 04 октября 2019

Вот один из подходов:

const arr1Ids = [];

arr1.forEach((obj)=>{
  arr1Ids.push(obj.id);
});

arr2.forEach((obj)=>{
  if ( arr1IdArr.includes(obj.id) ) {
    result.forEach((rObj)=>{
      if ( rObj.id === obj.id ) {
        rObj.isNew = true;
      }
    })
  }
})

Хотя я и проголосовал за ответ GeorgeMA, потому что он более лаконичен

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