js 函数改变数组内容

    const dfs=(r,c,flow)=>{
        flow[r][c]=true
        let list = [[r-1,c],[r+1,c],[r,c-1],[r,c+1]].forEach(([nr,nc])=>{
           
            if(
                //保证在矩阵中
                nr>=0&&nr<m&&
                nc>=0&&nc<n&&
                //防止死循环
                !flow[nr][nc]&&
                //保证逆流而上
                heights[nr][nc]>=heights[r][c]
            ){
                dfs(nr,nc,flow)
            }
        })
    }
    //沿着海岸线逆流而上
    for(let r = 0 ;r<m;r+=1){
        dfs(r,0,flow1)
        dfs(r,n-1,flow2)
    }
    for(let c = 0;c<n;c+=1){
        dfs(0,c,flow1)
        dfs(m-1,c,flow2)
    }

 

在leetcood中的417题中的矩阵深度遍历中。

对传入数组值的改变,成功影响到了外层。

 parent(val) {
      if (val.areaData &&this.isfirst) {
        this.setDsctData(val.areaData)
        this.isfirst=false
      }
    
    },

setDsctData(data) {
      //let tmpData=data//显而易见的事,哪怕用临时变量来存在也只是调用地址
      let tmpData=[...data]//奇怪的是我明明结构了但还是影响到了原来的地址
      this.dsctData = tmpData.map(item => {
        item.child.shift()//在这里我明明传删除的只是传过来的data,但是居然连组件中的值也一起修改了,也就是说函数中传递对象的值是通过地址传播的
        return item.child
      }).flat()
    },

 

posted @ 2022-04-22 23:04  前端路远且长  阅读(431)  评论(0)    收藏  举报