查找并更新数组中的对象

Find and update an object in an array

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

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_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);