使用splice直接删除了数组 改变了数组的键值。
所以JS中删除批量删除数组元素时应该倒序删除(意思是先删除索引大的元素,再删除索引小的元素)
因为在删除的过程中数组的索引会变化,如果先删除了小的元素,后面元素的索引都会变化.
deleteData() {
if(this.selectedIndexs.length == 0){
this.modalContent = "请选择一条数据";
this.isShowModal=true;
return;
}
this.maopaoSort(this.selectedIndexs); //先排序防止顺序不一致
this.selectedIndexs.reverse(); //倒序解决splice删除数组后改变键值
this.selectedIndexs.forEach(selectItem => {
if(this.tableData[selectItem].id != undefined && this.tableData[selectItem].id != null){
this.delTableData.push(this.tableData[selectItem]);
}
this.tableData.splice(selectItem,1);
})
this.selectedIndexs.length = 0;
this.$refs.table.clearSelection();
},
//冒泡排序
maopaoSort(arr){
for(let i=0;i<arr.length-1;i++){
for(let j=i;j<arr.length;j++){
if(arr[i]>arr[j]){
let changeData = arr[i];
arr[i] = arr[j];
arr[j] = changeData;
}
}
}
return arr;
},