javascript - 替换对象值而不替换引用

标签 javascript object reference

如何更新整个对象,例如:

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/

相关文章:

c++ - 命名空间和 undefined reference

visual-studio-2010 - 在大型 VS 解决方案中自动添加引用

javascript - 如何在js文件中使用php文件中的变量?

javascript - html div横向滑动的难点

javascript - 返回 "[object Object] NaN"- Javascript

javascript - 调用 ajax 调用序列的模式?

java - 如何对 ArrayList 中的项目进行排序,并根据 ArrayList 中的顺序更改另一个数组中项目的位置?

javascript - 通过索引字符串值在 Javascript 对象中搜索

c++ 为什么要使用引用?

php - PHP 是否具有对象的简写语法?