如何更新/添加数组中的元素?
var persons = {
data: []
};
var bob = {name: 'Bob', age: 15};
var fill = {name: 'Fill', age: 20};
var mark = {name: 'Mark', age: 19};
var john = {name: 'John', age: 4};
persons['data'].push(bob);
persons['data'].push(fill);
persons['data'].push(mark);
persons['data'].push(john);
var updatedJohn = {name: 'John', age: 100};
if (!persons['data'][updatedJohn.name]){
persons['data'].push(updatedJohn);
} else {
persons['data'][updatedJohn.name] = updatedJohn; // this line doesn't work
}
如果元素 John
已经存在,我不知道如何更新数组的元素。
更新
最佳答案
您将需要如下查询函数来帮助您根据数据库中的属性查找索引:( JSFiddle )
function findIndexByProperty(data, key, value) {
for (var i = 0; i < data.length; i++) {
if (data[i][key] == value) {
return i;
}
}
return -1;
}
var johnIndex = findIndexByProperty(persons.data, 'name', 'John');
if (johnIndex > -1) {
persons.data[johnIndex] = updatedJohn;
} else {
persons.data.push(updatedJohn);
}
请注意,这只会返回名称为 John 的第一条记录。您将需要决定在多个此类记录的情况下您希望它做什么 - 更新所有这些记录?这种问题就是为什么数据库通常有唯一的键来标识记录。
如果使用 Underscore 或 lodash 你已经有一个 _.findIndex()
可以替代使用的函数:
var johnIndex = _.findIndex(persons.data, { name: 'John' });
2021 年更新:使用现代 JavaScript,您可以将函数替换为
const johnIndex = persons.data.findIndex(p => p.name === "John")
关于javascript - 如何在 JavaScript 中更新/添加数组元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26700310/