数组解构的赋值与深层解构 - Kaiqisan

数组解构的赋值与深层解构

Kaiqisanです,一つの学生プログラマーである 今天就讲讲前几节数组解构的剩余知识,可能用得比较少,但是,嘛!记住这些技巧在您未来的实战中一定会有用武之地,就像我学习日语,本来以为课本里面一个几乎用不到的一个单词,但是在我下午看日剧的时候,就再一次见到它了。所以,这也同理,这些冷门方法的产生不是让我们背它们的,而是让我们去使用它们。

今天要将的其他方法,主要有以下三点

  • 实现两个变量的值的交换

在我们以前的经验中,交换两个值需要第三个参数来暂时存储temp一个参数

let a  = 10
let b = 15

let temp
temp = a
a = b
b = temp

这样其实很麻烦,如果需要频繁地交换数据的话,还需要封装一个专门交换的方法,这样非常麻烦。

但是

使用数组解构的话变量交换将变得极其方便

[a, b] = [b, a]

通过交换映射,直接一句话就实现交换。

它的原理是这样的

let a = 10
let b = 15
let arr = [a, b]
[b, a] = arr

从这个原理,我们可以延伸为多个数据之间的数据交换,这可以节省大量的计算量和代码量。是很好的一种选择。


  • 对于二维数组等维数较高的数组也同样ok
let arr = [1, [2, 3], 4]
let [params1, [params2]] = arr
console.log(params1, params2) // 结果为params1 = 1, params2 = 2

它的原理是这样的

params1就像正常赋值一样直接把第一个成员 ”1“ 拿过来,对于params2来说,它是处于第二层,被第二个数组接着包裹,它的赋值过程如下

let [params1, [params2]] = arr
===>
[params2] = [2, 3]
===>
params2 = 2

这里进行了两次解构才能成功赋值

接下来,我们假设params2在被赋值的时候并没有被包裹在一个数组里面的

let arr = [1, [2, 3], 4]
let [params1, [params2]] = arr
console.log(params1, params2) // 结果为params1 = 1, params2 = 2

所以一个数组如果是一个n维数组,那么,要想赋值成功的话就最多要做出n次解构赋值,以下为一极端案例。

let arr = [1, 2, 3, [5, 6, 7, [8, [[11, 12], 9], 10]], 4]
// 现在试图拿到 12 我要怎么做?
// 答案在本篇文章末尾

如果左边被赋值的那部分参数写得不规范,是会报错的!

let arr = [1, 2, [3, 4, 5], 6]
let [params1, [params2]] = arr

在这里,[params2] 被赋予一个值 2,左为数组类型,右为数字类型,但是,这就导致了数据类型的错误,无法被赋值。
error


  • 数组解构可以配合默认值一起使用
const namelist=["Kaiqisan","Jerry"]
const [a,b,c="John"] = na
melist

有时候,如果我们的参与赋值的数组的长度未定的话,就可以使用这个默认值,防止多余的那个被赋值的参数可怜地成为undefined。这也是程序强化健壮性的一个重要方法。

总结

数组解构的所有知识就到此为止了,虽然它有一些局限性,但是有一说一啊,这是一个好方法,是一个全新的定义数据的方法也可以用它衍生到别的用途比如数据交换。

  • 参考答案
let arr = [1, 2, 3, [5, 6, 7, [8, [[11, 12], 9], 10]], 4]
let [a, b, c, [d, e, f, [g ,[[, params]]]]] = arr
console.log(params) // 打印出来的就是答案,你明白了吗!?
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

kaiqisan

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值