我想通过创建一个新对象来合并两个对象,该新对象包含两个原始对象中出现的所有键,并指定一个合并键值的函数(如果不存在,值应作为 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/