将对象列表中的对象项替换为另一个项

时间:2018-01-08 13:51:04

标签: javascript vue.js socket.io lodash

我的变量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;
        }
    });

3 个答案:

答案 0 :(得分:2)

使用" findIndex"查找rows数组中新item元素的索引的方法。然后,检查是否找到了结果(检查索引是否大于-1)。使用找到的元素的位置将项目分配给数组。

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

if (indexOfItemInArray > -1) {
   rows[indexOfItemInArray] = new_item;
}

或使用"拼接"方法:

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

答案 1 :(得分:1)

在行中查找项目并指定新的项目键:

变异行

_.chain(rows)
    .find({ id: new_item.id })
    .assign(new_item)
    .value();

不要改变行:

const newRows = _.chain(rows)
    .findIndex({ id: new_item.id })
    .thru(index => _.chain(rows)
        .cloneDeep()
        .set(index, new_item)
        .value()
    )
    .value();

答案 2 :(得分:0)

要使用特定ID的新值更新数据,请使用map函数:

rows = rows.map((row) => {
    if (row.id === new_item.id) {
        row = new_item;
    }

    return row;
});