如何用lodash克隆所有非未定义的属性?
给定两个对象:
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
值)。
热门答案的作品。
这是一个较短的版本:
let result = _.extend(source, overrides); result = _.omit(result, _.isUndefined);
我喜欢链接:
let result = _.chain(source) .extend(overrides) .omit(_.isUndefined) .value();
使用_.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);
JSfiddle 。
这是由Quy提供的答案的派生,它执行深度克隆,并使用_.extend
分配覆盖值而不是浅拷贝:
let result = _.chain(source) .cloneDeep() .extend(overrides) .omit(_.isUndefined) .value();