如何添加条件以比较两个数组并更改匹配数组的值

How to add condition to compare two array and change value of match array

我想比较两个数组,因为我想更改匹配 ID 的值。

请参考下面的数组和结果。

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


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

我想使用下划线库来比较这个数组 return 比较数组值结果如下面的数组

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

你可以试试这个:

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

您可以使用 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)

您可以使用 lodash.maplodash.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>

另一个使用地图的解决方案

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);