use*_*353 99 javascript arrays ecmascript-6 lodash
我有一个对象数组.我想通过某个字段找到,然后改变它:
var item = {...}
var items = [{id:2}, {id:2}, {id:2}];
var foundItem = items.find(x => x.id == item.id);
foundItem = item;
Run Code Online (Sandbox Code Playgroud)
我希望它能改变原始对象.怎么样?(我不在乎它是否也会在lodash)
Cod*_*gue 189
您可以使用findIndex在对象的数组中查找索引并根据需要替换它:
var item = {...}
var items = [{id:2}, {id:2}, {id:2}];
var foundIndex = items.findIndex(x => x.id == item.id);
items[foundIndex] = item;
Run Code Online (Sandbox Code Playgroud)
这假设是唯一的ID.如果您的ID重复(如您的示例中所示),则使用forEach可能会更好:
items.forEach((element, index) => {
if(element.id === item.id) {
items[index] = item;
}
});
Run Code Online (Sandbox Code Playgroud)
Sol*_*tos 35
我最好的方法是:
var item = {...}
var items = [{id:2}, {id:2}, {id:2}];
items[items.findIndex(el => el.id === item.id)] = item;
Run Code Online (Sandbox Code Playgroud)
如果你不想用新对象替换,而是复制字段item,你可以使用Object.assign:
Object.assign(items[items.findIndex(el => el.id === item.id)], item)
作为替代方案.map():
Object.assign(items, items.map(el=> el.id === item.id? item : el))
ton*_*ral 23
使用扩展运算符的单行。
const updatedData = originalData.map(x => (x.id === id ? { ...x, updatedField: 1 } : x));
Run Code Online (Sandbox Code Playgroud)
Fel*_*ger 21
给定一个改变的对象和一个数组:
const item = {...}
let items = [{id:2}, {id:3}, {id:4}];
Run Code Online (Sandbox Code Playgroud)
通过迭代数组,用新对象更新数组:
items = items.map(x => (x.id === item.id) ? item : x)
Run Code Online (Sandbox Code Playgroud)
Too*_*doo 12
另一种方法是使用拼接.
如果你正在使用反应式框架,它将更新"视图",你的阵列"知道"你已经更新了他.
答案:
var item = {...}
var items = [{id:2}, {id:2}, {id:2}];
let foundIndex = items.findIndex(element => element.id === item.id)
items.splice(foundIndex, 1, item)
Run Code Online (Sandbox Code Playgroud)
如果您只想更改项目的值,可以使用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
Run Code Online (Sandbox Code Playgroud)
可以使用Filter。
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);
Run Code Online (Sandbox Code Playgroud)
数组 [对象 { id: 0 }, 对象 { id: 12345 }, 对象 { id: 2 }]
| 归档时间: |
|
| 查看次数: |
106956 次 |
| 最近记录: |