Как добавить условие для сравнения двух массивов и изменить значение совпадающего массива - PullRequest
0 голосов
/ 04 ноября 2019

Я хочу сравнить два массива в том, что я хочу изменить значение соответствующего идентификатора.

Пожалуйста, обратитесь к приведенному ниже массиву и результату.

let array1 =[
  {
    "id": 1,
    "value": false
  },
  {
    "id": 2,
    "value": false
  },
  {
    "id": 3,
    "value": true
  },
  {
    "id": 4,
    "value": false
  }
]


let array2 = [
  {
    "id": 1
  },
  {
    "id": 4
  }
]

Я хочу использовать библиотеку подчеркивания, чтобы сравнить эти массивы и вернуть результат сравнения значений массива, как показано ниже массива

result = [
  {
    "id": 1,
    "value": true
  },
  {
    "id": 2,
    "value": false
  },
  {
    "id": 3,
    "value": true
  },
  {
    "id": 4,
    "value": true
  }
]

Ответы [ 4 ]

1 голос
/ 04 ноября 2019

Вы можете использовать Array.prototype.map () :

const array1 =[{"id": 1,"value": false},{"id": 2,"value": false},{"id": 3,"value": true},{"id": 4,"value": false}]
const array2 = [{"id": 1},{"id": 4}]

const result = array1.map(({id, value}) => ({
  id,
  value: value || array2.some(item => item.id === id)
}))

console.log(result)
0 голосов
/ 04 ноября 2019

Другое решение с использованием карты

let array1 =[
  {
    "id": 1,
    "value": false
  },
  {
    "id": 2,
    "value": false
  },
  {
    "id": 3,
    "value": true
  },
  {
    "id": 4,
    "value": false
  }
]


let array2 = [
  {
    "id": 1
  },
  {
    "id": 4
  }
]

const resultArr = array1.map((item) => {
      if (array2.findIndex((item2) => {return item2.id == item.id}) !== - 1) {
          item.value = true;
      }
      return item; 
  })
  console.log(resultArr);
0 голосов
/ 04 ноября 2019

Вы можете использовать lodash.map с lodash.some для проверки объекта и обновления value.

let array1 =[ { "id": 1, "value": false }, { "id": 2, "value": false }, { "id": 3, "value": true }, { "id": 4, "value": false } ],
    array2 = [ { "id": 1 }, { "id": 4 } ],
    result = _.map(array1, o => ({...o, value : _.some(array2, ({id}) => id === o.id) || o.value}));
console.log(result);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.15/lodash.min.js"></script>
0 голосов
/ 04 ноября 2019

Вы можете попробовать это:

array1.forEach(item => {
    item.value = item.value || array2.some(item2 => item2.id === item.id)
})
...