首页 > 解决方案 > 合并 2 个数组并使用 lodash 替换相同的键

问题描述

我有这个 2 数组,

const firstArray = [
{
 key: 'a',
 value: 'a'
},
{
 key: 'b',
 value: 'b'
},
{
 key: 'c',
 value: 'c'
}
]

const secondArray = [
{
 key: 'b',
 value: 'd'
},
{
 key: 'c',
 value: 'e'
}
]

我想合并这两个数组,如果在第二个数组上找到相同的键,则第二个数组值将替换第一个数组值

新数组应如下所示

const expectedArray = [
{
 key: 'a',
 value: 'a'
},
{
 key: 'b',
 value: 'd'
},
{
 key: 'c',
 value: 'e'
}
]

标签: javascriptarrayslodash

解决方案


正如我lodash在您的标签中看到的那样,我假设您想使用它。

你可以使用这样的东西:

var merged = _(firstArray)
  .concat(secondArray)
  .groupBy("key")
  .map(_.spread(_.merge))
  .value();

它基本上将具有相同键的所有对象分组到一个数组中groupBy("key"),然后展平每个值数组,将它们合并并取最后一个.map(_.spread(_.merge))

建议把最后的点赞注释掉,看所有的中间步骤,想全面了解流程,很有意思!

const firstArray = [{
    key: 'a',
    value: 'a'
  },
  {
    key: 'b',
    value: 'b'
  },
  {
    key: 'c',
    value: 'c'
  }
]

const secondArray = [{
    key: 'b',
    value: 'd'
  },
  {
    key: 'c',
    value: 'e'
  }
]

var merged = _(firstArray)
  .concat(secondArray)
  .groupBy("key")
  .map(_.spread(_.merge))
  .value();

console.log(merged);
<script src="https://cdn.jsdelivr.net/lodash/4.13.1/lodash.min.js"></script>


推荐阅读