替换数组中的项并不总是有效

时间:2019-03-25 14:10:25

标签: javascript

我有以下代码

    let item = this.datasets.filter((item) => item.id === tableRow.id);
    if (item && item.length != 0) {
        // Update case
        item[0] = tableRow; 
    }

它不能正确更新项目。有时它有用,有时不起作用。

我将以下代码替换为以下代码:

    let index = -1;
    for (let i = 0; i < this.datasets.length; i++) {
        if (this.datasets[i].id === tableRow.id) {
            index = i;
        }
    }

    if (index !== -1) {
        // Update case (delete + insert)
        this.datasets.splice(index, 1, tableRow);
    }

这始终有效。第一种方法有什么问题?

谢谢

1 个答案:

答案 0 :(得分:1)

在第一种情况下,item拥有一个由Array#filter方法返回的新数组,因此更改item数组中的元素不会对datasets数组进行任何更改。


您甚至可以使用Array#findIndex方法简化第二种方法。

let index = this.datasets.findIndex((item) => item.id === tableRow.id);
if(index > -1) this.datasets.splice(index,1,tableRow)