给出两个对象:
let source = {
a: 1,
b: 2,
c: { x: 1, y: 2, z: 3 }
};
let overrides = {
b: undefined,
d: 4
};
如何使用lodash模块生成具有以下深度克隆值的新对象?
let result = _.cloneDeep(source, excludeKeysThatAreUndefinedInOverrides);
_.assign(result, overrides, excludeKeysThatAreUndefinedInOverrides);
console.log(result);
// {
// a: 1,
// c: { x: 1, y: 2, z: 3 },
// d: 4
// };
完全排除密钥“b”(即未分配undefined
值)。
答案 0 :(得分:2)
使用_.extend
合并source
和overrides
,然后使用_.pick
删除undefined
:
let source = {
a: 1,
b: 2,
c: { x: 1, y: 2, z: 3 }
};
let overrides = {
b: undefined,
d: 4
};
let result = _.extend(source, overrides);
result = _.pick(result, function(element) {
return typeof element != "undefined";
});
console.log(result);
答案 1 :(得分:2)
最佳答案有效。
这是一个较短的版本:
let result = _.extend(source, overrides);
result = _.omit(result, _.isUndefined);
我喜欢链接:
let result = _.chain(source)
.extend(overrides)
.omit(_.isUndefined)
.value();
答案 2 :(得分:2)
这是Quy提供的答案的推导,它执行深度克隆并使用_.extend
分配覆盖值而不是浅拷贝:
let result = _.chain(source)
.cloneDeep()
.extend(overrides)
.omit(_.isUndefined)
.value();