js记录双层for循环中引用传递造成的死循环(值传递解决)

 请看以下代码。

        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合并到一起就行了,反正后面也要去重的,多此一举。。。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值