javascript - 使用基于 lodash 键的回调来合并两个对象

标签 javascript functional-programming lodash

我想通过创建一个新对象来合并两个对象,该新对象包含两个原始对象中出现的所有键,并指定一个合并键值的函数(如果不存在,值应作为 null/undefined 传递在其中一个对象中)。

示例:

let foo = {"x": [1, 2], "y": [10, 11]};
let bar = {"x": [3, 4], "z": [22, 23]};

let merged = mergeByKey(foo, bar, (key, fooValue, barValue) => {
    return (fooValue || []) + (barValue || []);
});

//merged = {"x": [1, 2, 3, 4], "y": [10, 11], "z": [22, 23]}

最佳答案

您可以使用lodash#mergeWith它有一个 iteratee 决定用相同的键连接数组。

var merged = _.mergeWith(foo, bar, (v1, v2) => {
  if(_.isArray(v1)) {
    return v1.concat(v2);
  }
});

let foo = {"x": [1, 2], "y": [10, 11]};
let bar = {"x": [3, 4], "z": [22, 23]};

var merged = _.mergeWith(foo, bar, (v1, v2) => {
  if(_.isArray(v1)) {
    return v1.concat(v2);
  }
});

console.log(merged);
body > div { min-height: 100%; top: 0; }
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.js"></script>

关于javascript - 使用基于 lodash 键的回调来合并两个对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43775596/

相关文章:

javascript - SetHTML 之后立即在 FCKeditor 上 ResetIsDirty -- Javascript 的并发/计时问题

Javascript仅将源的交集分配给目标对象

functional-programming - T 上的映射函数?

Java 函数泛型

ruby - 'yield called out of block' 在 Ruby 中是什么意思?

database - forEach 循环后的对象 SequelizeInstance

javascript - 如何删除嵌套数组的元素并保留原始结构?

javascript - 时间线操作布局 - 不显示附件

javascript - 如何创建类似 Vultr.com 的用户界面演示

javascript - 程序中缺少什么?即使字段留空,表单也会被接受