如何在 lodash 中创建一个具有隐藏属性的新对象?
How to create a new object with overshadowed properties in 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 }
您可以将 _.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>
我想用对象 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 }
您可以将 _.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>