如何更新整个对象,例如:
var x = {a:1}
function modify(obj) {
obj = {b:2}
}
modify(x)
console.log(x) // {a:1}
但是保持引用?我希望在函数外修改对象。
我的具体情况是在我的函数中使用 lodash.pick
:
if (whitelist) {
obj = _.pick(obj, whitelist)
}
我似乎找不到修改对象的pick
函数。有没有办法做到这一点,或者我是否需要开始返回对象的副本?
最佳答案
删除
旧对象的所有内容,然后逐个键添加新属性:
function modify(obj, newObj) {
Object.keys(obj).forEach(function(key) {
delete obj[key];
});
Object.keys(newObj).forEach(function(key) {
obj[key] = newObj[key];
});
}
var x = {a:1}
modify(x, {b:42})
document.write(JSON.stringify(x));
如果您想知道这在总体上是否是个好主意,答案是否定的。构造一个新对象,从函数返回它并赋值 - 这是一种更受欢迎的方式。
关于javascript - 替换对象值而不替换引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26957719/