Javascript 使用基于lodash键的回调合并两个对象

Javascript 使用基于lodash键的回调合并两个对象,javascript,functional-programming,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) => {

我希望通过创建一个新对象来合并两个对象,该对象包含任何一个原始对象中出现的所有键,并指定一个函数来合并键的值(如果其中一个对象中不存在值,则应将值作为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]}
您可以使用一个iteratee来决定使用相同的键连接数组

var merged = _.mergeWith(foo, bar, (v1, v2) => {
  if(_.isArray(v1)) {
    return v1.concat(v2);
  }
});
let foo={“x”:[1,2],“y”:[10,11]};
设bar={“x”:[3,4],“z”:[22,23]};
var merged=u0.mergeWith(foo,bar,(v1,v2)=>{
如果(u.isArray(v1)){
返回v1.concat(v2);
}
});
console.log(合并)
body>div{min height:100%;top:0;}

适用于使用ImmutableJS的用户

const { Map } = Immutable

const arrayMerger = (a,b) =>
  Array.isArray(a) && Array.isArray(b) ? a.concat(b) : b

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

Map(foo).mergeDeepWith(arrayMerger, Map(bar)).toJS()
// {"x": [1, 2, 3, 4], "y": [10, 11], "z": [22, 23]}