如题,当时博主正在写leetcode,要求原地改变数组
故声明双指针 left 和 right,对数组进行交换,即
[arr[left], arr[right]] = [arr[right--], arr[left++]];
但是未得到预期的结果,随后进行了测试:
1 let arr = [1, 2, 3, 4, 5]; 2 let left = 1, right = 3; 3 [arr[left], arr[right]] = [arr[right--], arr[left++]]; 4 console.log(arr); 5 console.log(left, right);
预期结果:
但运行结果:
分析:
1、left++ 和 right-- 均正常执行,那么可能是解构赋值的问题?
随即寻找解构赋值的原理,但未果。
后来仔细琢磨,感觉这玩意也比较简单,其实并没有什么深奥的原理,仅仅是对应位置的赋值罢了
2、既然如此,那就debugger,在第2行后插入 debugger;
发现在左侧变量赋值之前,left 和 right 就已经改变了,那这么一来就很明了了
1 let arr = [1, 2, 3, 4, 5]; 2 let left = 1, right = 3; 3 [arr[left++], arr[right--]] = [arr[right], arr[left]]; 4 console.log(arr); 5 console.log(left, right);
真相:
赋值运算符是从右往左运行的,故指针的值先于数组改变
将 -- 和 ++ 放在赋值运算符左侧即可
标签:arr,right,--,++,left,赋值 From: https://www.cnblogs.com/Delusional-man/p/17658170.html