用另一个项目替换对象列表中的对象项目

asp*_*aga 2 javascript socket.io lodash vue.js

我的变量中有一个 items 对象this.rows。来自服务器的实时项目与this.rows对象集合中的项目相同。

如何用新值替换项目?

下面是一个例子:

    let rows = [
        {id: 11, active: 'no'},
        {id: 22, active: 'yes'},
        {id: 33, active: 'no'},
        {id: 44, active: 'no'}
    ]

    new_item = {id: 22, active:'yeah'};

    rows.forEach(item => {
        if (item.id === new_item.id) {
          return new_item;
        }
    });
Run Code Online (Sandbox Code Playgroud)

Jul*_*bos 8

使用“findIndex”方法在行数组中查找新项目元素的索引。之后,检查是否找到结果(检查索引是否大于 -1)。使用找到的元素的位置将项目分配给数组。

const indexOfItemInArray = rows.findIndex(q => q.id === new_item.id);

if (indexOfItemInArray > -1) {
   rows[indexOfItemInArray] = new_item;
}
Run Code Online (Sandbox Code Playgroud)

或者使用“拼接”方法:

const indexOfItemInArray = rows.findIndex(q => q.id === new_item.id);
rows.splice(indexOfItemInArray, 1, new_item);
Run Code Online (Sandbox Code Playgroud)

  • 您的第一个选项可以使用,但无法响应式更新 Vue(这是 Vue 更改检测问题),但 splice 可以正常工作。 (3认同)