查找并更新数组中的对象
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);
我想从对象数组中获取一个对象,然后更新它。
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);