出于好奇,进行了结构的尝试。
let a = [1,2,3,4,5];
for(let i = 0;i<a.length/2;i++){
[ a[i] , a[a.length -1 -i] ] = [ a[a.length-1-i] , a[i] ]
}
console.log(a,"reverse")
首先按照图中说的,不需要第三个变量的参与,如果解构不用 数组 []嵌套,会解析为多个变量,so 忽略这两个数组。
虽然这样,运行起来还是会报错。 大意是 5没办法赋值给 undefined, 显然 =左边的已经不是变量,而是一个常量了。实际变为 [1,5] = [5,1]
解析器当然不知道把5给谁
基于上边猜想,进行验证,代码如下
let m = 1,n = 2;
[m,n]= [n,m]
console.log("m = ",m,"n=",n)
a = [1,2,3,4,5]
for i in range(len(a)):
[ a[i], a[len(a)-1-i] ] = [ a[len(a)-1-i], a[i] ]
print a
m,n = n,m
//这就是废代码 啥都没有做
var a=1,b=2;
a=[b,b=a][0];
console.log(a,b)
let a = [1,2,3,4,5];
for(let i = 0;i<a.length/2;i++){
a[i] = [ a[a.length-1-i], a[a.length-1-i] = a[i] ][0];
}
console.log(a,"reverse")
虽然反转成功,但这里有个问题:
虽然省下来了存储变量的开销,但实际上每个长度都要实时获取,在不改变数组长度的情况下,这也是一种浪费,对处理机时长的浪费。
数组长度不大的时候,这种做法完全可以理解,数组长度大了 或者 数组是批量的,这是不是又不实用了?
原文:https://www.cnblogs.com/chengyunshen/p/10641408.html