【问题标题】:How to add condition to compare two array and change value of match array如何添加条件来比较两个数组并更改匹配数组的值
【发布时间】:2020-02-29 17:50:36
【问题描述】:

我想比较两个数组,因为我想更改匹配 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
  }
]

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

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

【问题讨论】:

    标签: javascript arrays node.js underscore.js lodash


    【解决方案1】:

    你可以试试这个:

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

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

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

        【讨论】:

          【解决方案4】:

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2020-10-11
            • 1970-01-01
            • 2022-01-02
            相关资源
            最近更新 更多