Javascript 查找并更新数组中的对象

Javascript 查找并更新数组中的对象,javascript,underscore.js,Javascript,Underscore.js,我想从对象数组中获取一个对象,然后更新它 var myObjs = [{ id: 1, name: "foo"}, { id: 2, name: "bar" }]; var myObjectToUpdate = _.findWhere(myObjs, { id: 2 }); myObjectToUpdate = { id: 2, name: "boop" }; myObjs[1] // { id: 2, name: "boop" } 当前,当我在第3行中更新myObject时,它不会更新

我想从对象数组中获取一个对象,然后更新它

var myObjs = [{ id: 1, name: "foo"}, { id: 2, name: "bar" }];

var myObjectToUpdate = _.findWhere(myObjs, { id: 2 });

myObjectToUpdate = { id: 2, name: "boop" };

myObjs[1] // { id: 2, name: "boop" }
当前,当我在第3行中更新myObject时,它不会更新对象数组。我假设它正在更新新变量,而不是引用


正确的方法是什么?

@E\u net4是正确的,您正在重新分配刚刚找到的对象

如果只需更新名称,请尝试以下操作:

var myObjs = [{ id: 1, name: "foo"}, { id: 2, name: "bar" }];

var myObjectToUpdate = _.findWhere(myObjs, { id: 2 });

myObjectToUpdate.name = "boop";

myObjs[1] // { id: 2, name: "boop" }

我想这就是你想要的。在代码中,您有错误的概念。请阅读我的代码并比较两者

希望有帮助

function fn(arr, toReplace, newValue) {
  for(var x in arr) {
    for(var k in toReplace) {
      if(arr[x][k] == toReplace[k]) {
        arr[x] = newValue;
      }
    }
  }
  return arr;
};

var arr = [{ id: 1, name: "foo"}, { id: 2, name: "bar" }];
var newValue = {id: 2, name: "boop"};

arr = fn(arr, {id: 2}, newValue);
console.log(arr);

您已在第3行中重新分配myObjectToUpdate变量。它不会影响从数组中检索到的。JavaScript引用是按值复制的。哇,现在很明显-谢谢:看起来好像有人用否决票而不是使用close来抨击这个问题和答案。抱歉,伙计们:如果能解释为什么投票失败,PIt会很有用。。。这是他想要做的。提供一段新代码而不说明问题的根源,并且在问题中标记时简单地避免下划线,这似乎是一个糟糕的答案。