关于数组解构赋值搭配自增自减取值异常的问题

丶聆听时间
  • 4
新手上路,请多包涵
const reverse = (target, s, e) => {
            while (s < e) {
                [target[e--], target[s++]] = [target[s], target[e]]
                
                //[5,6,7,1,2,3,4]
                
                //这种形式 target[s++] / target[e--] 取到的值自始至终没有改变过

                // [target[e], target[s]] = [target[s++], target[e--]] 
                //[1,7,1,7,7,1,7]
            }
        }
        const rotate = (arr, step) => {
            reverse(arr, 0, arr.length - 1)
            return arr
        }

        const rotateArr = rotate([1,2,3,4,5,6,7], 3)

        console.log(rotateArr)

一段旋转数组的代码,while循环中对应的两种数组解构赋值写法,在左侧做自增自减运算能够得到正确的结果,换做右侧则取到的值却从未发生改变

回复
阅读 336
1 个回答
✓ 已被采纳

首先,=号操作会先计算右边的
然后以你案例中的数组来捋一下

第一种
0、初始状态,s是0,e是6
1、获取target[s] 和 target[e]
2、把target[0]赋值给target[e]然后进行e--操作,e变成了5,把target[6]赋值给target[s]然后进行s++操作,s变成了1
3、循环1

第二种
0、初始状态,s是0,e是6
1、获取target[s]然后进行s++操作,s变成了1,获取target[e]然后进行e--操作,e变成了5
2、把target[0]赋值给target[e])(此时e是5),把target[5]赋值给target[s])(此时s是1)
3、循环1

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
你知道吗?

宣传栏