javascript - 如何在 JavaScript 中更新/添加数组元素?

标签 javascript

如何更新/添加数组中的元素?

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 example

最佳答案

您将需要如下查询函数来帮助您根据数据库中的属性查找索引:( 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/

相关文章:

javascript - 当所有代码都在一个脚本标记中时,为什么该脚本不会执行?

javascript - 如何使用带有复选框的多选下拉菜单

javascript - 有人知道为什么我的 transform scale css 不工作吗?

javascript - 难以理解 API 和 DOM

javascript - 动态更改 following-mouse-div 的颜色,与其下方的颜色互补

javascript - 在 javascript 中将默认日期格式更改为 d/m/Y

javascript - 取消 RouteChange 上的 AngularJS $timeout

javascript - ffmpeg错误事件监听器中的Sinon stub

javascript - 生成随机的绿色阴影

javascript - Firestore 事务在单个事务中更新多个文档