如何在lodash中创建一个具有阴影属性的新对象?

时间:2016-09-08 09:42:39

标签: javascript merge functional-programming javascript-objects lodash

我想用对象A的属性和对象B的属性值创建一个新对象(不修改任何现有对象),如果该属性存在于对象B中,如果它没有则默认为对象A.

它与Object.assign({}, a, b)类似,但忽略了第二个参数中没有的所有键。

有没有办法用Lodash做到这一点?

这是我正在寻找的本机JS实现:

function overshadow(oldObj, newObj) {
  return Object.keys(oldObj)
    .reduce((result, key) => {
      result[key] = newObj[key] || oldObj[key];
      return result;
    }, {});
};

a = { one: 1, two: 2 };

b = { one: 'a', three: 'b' };

c = overshadow(a, b);

console.log(c) // { one: "a", two: 2 }

1 个答案:

答案 0 :(得分:1)

您可以使用_.pick()Object.keys()_.keys()从newObj中获取oldObj中存在的属性:

a = { one: 1, two: 2 };
b = { one: 'a', three: 'b' };

function overshadow(oldObj, newObj) {
  return _.assign({}, oldObj, _.pick(newObj, Object.keys(oldObj)));
}

var result = overshadow(a, b);

console.log(result);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.15.0/lodash.min.js"></script>