【问题标题】:How to create a new object with overshadowed properties in lodash?如何在 lodash 中创建一个具有被遮蔽属性的新对象?
【发布时间】:2017-01-16 04:32:12
【问题描述】:

我想用对象 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 }

【问题讨论】:

  • 但它会添加b 中不存在的a 的属性,而这正是我想要避免的。
  • 那我猜不可能:(

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


【解决方案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>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-07-20
    • 1970-01-01
    • 1970-01-01
    • 2019-06-14
    • 1970-01-01
    • 1970-01-01
    • 2012-07-26
    • 1970-01-01
    相关资源
    最近更新 更多