我有以下代码
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);
}
这始终有效。第一种方法有什么问题?
谢谢
答案 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)