我有一个对象数组。我想通过某个字段找到它,然后改变它:
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中。)
当前回答
给定一个改变的对象和一个数组:
const item = {...}
let items = [{id:2}, {id:3}, {id:4}];
通过遍历数组,用新对象更新数组:
items = items.map(x => (x.id === item.id) ? item : x)
其他回答
使用展开运算符的一行程序。
const updatedData = originalData.map(x => (x.id === id ? { ...x, updatedField: 1 } : x));
给定一个改变的对象和一个数组:
const item = {...}
let items = [{id:2}, {id:3}, {id:4}];
通过遍历数组,用新对象更新数组:
items = items.map(x => (x.id === item.id) ? item : x)
你也可以这样做
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;
为我工作
let returnPayments = [ ...this.payments ];
returnPayments[this.payments.findIndex(x => x.id == this.payment.id)] = this.payment;
我还没有在答案中看到这种方法,所以这里有一个简单的小代码
let item = {id: 1, new: true};
let items = [{id: 1}, {id: 2}];
let replaced = [item, ...items.filter(i => i.id !== item.id)]
您只是将项目添加到要替换的项目筛选的原始数组中。