请看以下代码。
addToSelectedRow(data){
for(let i=0;i<this.selectedRowKeys.length;i++){
for(let k = 0;k<data.length;k++){
if(this.selectArray[i] != data[k].id){
this.selectedRowKeys.push(data[k].id)
}
}
}
}
乍一看是不是觉得没什么问题????不知道是中饭没吃饱还是中午没休息,抑或是js写少了,这里的死循环我始终没看出来我去~~~~吐血~~~出现的症状就是一执行这个方法, 浏览器就卡死了,一度怀疑新买的小米pro本本是不是真的不行。。
知道了问题,就是this.selectedRowKeys.push这里,不停的往selectedRowKeys里面添加元素,哪里循环的完呢?
然后就把data跟selectedRowKeys赋值给新声明的两个对象后,遍历的是新的对象,push的是老的对象,问题成功解决,
这是改为值传递之后的写法
let selectArray = JSON.parse(JSON.stringify(this.selectedRowKeys))
let dataArray = JSON.parse(JSON.stringify(data))
for(let i=0;i<selectArray.length;i++){
for(let k = 0;k<dataArray.length;k++){
if(selectArray[i] != dataArray[k].id){
this.selectedRowKeys.push(dataArray[k].id)
}
}
}
注意:这里遍历以后,新的数据是会有重复的,需要给数组去重,写法如下:
//定义一个新数组来接收元素 删除数组中重复的元素
let newArr = [];
for(let t = 0;t<this.selectedRowKeys.length;t++){
//判断newArr中是否有selectedRowKeys[t]这个元素,如果返回结果为-1(<0)证明新数组newArr中没有这个元素,则把元素添加到新数组中
if(newArr.indexOf(this.selectedRowKeys[t])<0){
newArr.push(this.selectedRowKeys[t]);
}
}
this.selectedRowKeys = newArr;
总结到这里,感觉其实我上面可以不用双层for循环,直接两个数组的id合并到一起就行了,反正后面也要去重的,多此一举。。。