我有一个对象数组。我想通过某个字段找到它,然后改变它:
var item = {...}
var items = [{id:2}, {id:2}, {id:2}];
var foundItem = items.find(x => x.id == item.id);
foundItem = item;
我想让它改变原来的对象。怎么做?(我不在乎它是否也会在Lodash中。)
我有一个对象数组。我想通过某个字段找到它,然后改变它:
var item = {...}
var items = [{id:2}, {id:2}, {id:2}];
var foundItem = items.find(x => x.id == item.id);
foundItem = item;
我想让它改变原来的对象。怎么做?(我不在乎它是否也会在Lodash中。)
当前回答
你也可以这样做
var item = {...}
var items = [{id:2}, {id:2}, {id:2}];
var foundItem = items.filter((x) => x.id == item.id).pop();
foundItem = item;
OR
items.filter((x) => x.id == item.id).pop()=item;
其他回答
使用展开运算符的一行程序。
const updatedData = originalData.map(x => (x.id === id ? { ...x, updatedField: 1 } : x));
你可以使用findIndex来查找对象数组中的索引,并根据需要替换它:
var item = {...}
var items = [{id:2}, {id:2}, {id:2}];
var foundIndex = items.findIndex(x => x.id == item.id);
items[foundIndex] = item;
这假设了唯一的id。如果你的id是重复的(就像你的例子一样),使用forEach可能会更好:
items.forEach((element, index) => {
if(element.id === item.id) {
items[index] = item;
}
});
另一种方法是使用拼接。
splice()方法通过删除或替换现有元素和/或在适当位置添加新元素来更改数组的内容。
注意:如果你正在使用响应式框架,它会更新“视图”,你的数组“知道”你已经更新了它。
答:
var item = {...}
var items = [{id:2}, {id:2}, {id:2}];
let foundIndex = items.findIndex(element => element.id === item.id)
items.splice(foundIndex, 1, item)
如果你只想改变一个项的值,你可以使用find函数:
// Retrieve item and assign ref to updatedItem
let updatedItem = items.find((element) => { return element.id === item.id })
// Modify object property
updatedItem.aProp = ds.aProp
可使用过滤器。
const list = [{id:0}, {id:1}, {id:2}];
let listCopy = [...list];
let filteredDataSource = listCopy.filter((item) => {
if (item.id === 1) {
item.id = 12345;
}
return item;
});
console.log(filteredDataSource);
数组[对象{id: 0},对象{id: 12345},对象{id: 2}]
在我的例子中,我想找到一些元素(及其长度),并想在对象本身中添加一个新元素no_of_agents。所以,跟随确实帮助了我
details.forEach(obj => {
const length = obj["fleet_ids"].length || 0;
obj.set("no_of_agents" , length)
});
以某种方式map()返回其他细节(如'$__':InternalCache, strictMode, shardval等),这是不需要的,