我正在尝试通过复选框单击事件将行对象分配给数组。为此,我创建了一个如下所示的全局数组。
SelectedGrid: any[] = [];
在单击时,它似乎进入了数组,但是当我选中第二个复选框时,第一个项目就从数组中丢失了。 我可以知道为什么会这样吗?
以下是我在复选框单击事件中调用的函数。
public clickConditionRow(row, col, rowSelected) {
if (rowSelected.isChecked) {
this.SelectedGrid.push(rowSelected);
console.dir(this.SelectedGrid);
console.log(this.SelectedGrid.length);
} else {
console.log("Unselected ");
var toDel = this.SelectedGrid.indexOf(rowSelected);
this.SelectedGrid.splice(toDel);
console.dir(this.SelectedGrid);
}
if (!this.rootScope.$$phase) {
this.rootScope.$apply();
}
// for print the values
for (var y = 0; y < this.SelectedGrid.length; y++) {
console.log("Element " + y + " = " + this.SelectedGrid[y]);
console.dir(this.SelectedGrid[y]);
}
}
答案 0 :(得分:0)
我无法重现您的错误(也许您是在其他位置覆盖了数组?),但是我看到了2个潜在的问题,并想指出它们:
indexOf
与and对象一起使用可能无效,并返回-1(请参见下面的代码)splice(toDel)
应该为splice(toDel, 1)
,否则它将删除从索引toDel
到数组末尾的所有项目。
const a = { id: 1 }
const b = { id: 2 }
const list = [ a, b ]
// This returns 1
console.log(list.indexOf(b))
// This returns -1
console.log(list.indexOf({ id: 2 }))