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循环中对应的两种数组解构赋值写法,在左侧做自增自减运算能够得到正确的结果,换做右侧则取到的值却从未发生改变
首先,
=
号操作会先计算右边的然后以你案例中的数组来捋一下
第一种
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