javascript - 合并 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'
}
]
解决方案
正如我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>
推荐阅读
- c++ - 如何将 cin 数据连接到 C++ 中的 FILE 和 PRINT 数据?
- android - Flutter:任务':cloud_firestore:compileDebugJavaWithJavac'的执行失败
- python - 如何使 djangocms-admin 风格的标志动态化?
- apache-spark - 如何管理 Nifi ExecuteSparkINteractive 处理器中的“等待”状态?
- javascript - “未捕获的 TypeError:content.getElementById 不是函数”
- r - Re: 如何在 Shiny 中重置 fileInput 的值?
- reactjs - 我无法读取 Oraclize 查询的结果,但我可以成功调用它
- wordpress - 将 WordPress 复制到 xampp:恢复数据库后无法连接
- python - python中有没有办法从谷歌表中计算一系列行(从第一行数据到最后一行数据)?
- r - 有没有办法进行条件回归?