为了账号安全,请及时绑定邮箱和手机立即绑定

JavaScript数组解构

基本用法

ES5中,为了从数组中获取特定数据并赋值给变量,我们经常会进行如下的操作:

例子:

var arr = ["A", "B", "C"];
var a = arr[0],
    b = arr[1],
    c = arr[2];
console.log(a);
//输出:A

ES6为数组添加了解构功能,以简化获取数组中数据的过程。数组解构采用数组字面量的语法形式,即等号左边的变量通过在数组中的位置去取得等号右边的数组字面量相同位置的值。

例子:

let [a, b, c] = ["A", "B", "C"];
console.log(a);
//输出:A

我们也可以只为需要的元素提供变量名。

例子:

let [, , c] = ["A", "B", "C"];
console.log(c);
//输出:C

如果我们先声明了变量,之后也可以直接通过解构赋值修改变量的值。

例子:

let a = "D",
    b = "H";
[a, b] = ["A", "B"];
console.log(a);
//输出:A

我们也可以在数组解构赋值表达式中为任意变量添加默认值。只有当该位置在右侧数组中的值不存在时或值为undefined时,默认值才会生效。

例子:

const arr = ["A", "B"];
let [a, b, c = "C"] = arr;
console.log(c);
//输出:C

嵌套解构赋值

例子:

const arr = ["A", ["B"], "C"];
let [a, [b]] = arr;
console.log(b);
//输出:B

数组解构的独特用法

ES5中如果要交换两个变量的值,我们会引入临时变量:

例子:

let a = 1,
    b = 2,
    tmp;

tmp = a;
a = b;
b = tmp;
console.log(a); //输出:2
console.log(b); //输出:1

数组解构赋值可以更加简单的进行变量的交换。

例子:

let a = 1,
    b = 2;
[a, b] = [b, a];
console.log(a); //输出:2
console.log(b); //输出:1

不定元素与解构赋值的结合

ES6引入了“不定元素”的概念:在变量前添加三个点(…)就表明这是一个不定元素。不定元素是一个数组,会将等号右侧数组中的多余元素放入这个特定变量中。不定元素之后不能再有其他变量。

例子:

let arr = ["A", "B", "C"];
let [a, ...items] = arr;
console.log(a); //输出:A
console.log(Array.isArray(items)); //输出:true
console.log(items[0]); //输出:B

展开运算符

在数组解构的最后一个例子中,我们在变量名前添加三个点(…)将这个变量变成了不定元素。这三个点叫作展开运算符。展开运算符用于展开数组。

例子:

let arr = [2, 3, 4];
console.log(1, ...arr, 5);
//输出:1 2 3 4 5

展开运算符的妙用

1、替代apply方法

例子1:

ES5写法

(function(a, b, c) {
    console.log(a + b + c);
}).apply(null, [1, 2, 3]);
//输出:6

ES6写法

(function(a, b, c) {
    console.log(a + b + c);
})(...[1, 2, 3]);
//输出:6

例子2:

ES5写法

console.log(Math.max.apply(null, [1, 2, 3]));
//输出:3

ES6写法

console.log(Math.max(...[1, 2, 3]));
//输出:3

2、复制数组

例子:

ES5写法

let arr = [1, 2, 3];
let arr_copy_1 = arr;
let arr_copy_2 = arr.concat();
//注意区分两种复制数组的不同之处:
//arr与arr_copy_1指向同一个数组
console.log(Object.is(arr, arr_copy_1)); //输出:true
//arr_copy_2复制arr创建全新的数组
console.log(Object.is(arr, arr_copy_2)); //输出:false

ES6写法

let arr = [1, 2, 3];
let arr_copy_1 = [...arr];
let [...arr_copy_2] = arr;
console.log(Object.is(arr, arr_copy_1)); //输出:false
console.log(Object.is(arr, arr_copy_2)); //输出:false

3、合并数组

例子:

ES5写法

let arr1 = [1, 2],
    arr2 = [3, 4];
let arr3 = arr1.concat(arr2);
console.log(arr3);
//输出:[1, 2, 3, 4]

ES6写法

let arr1 = [1, 2],
    arr2 = [3, 4];
let arr3 = [...arr1, ...arr2];
console.log(arr3);
//输出:[1, 2, 3, 4]

4、把数组添加到另一个数组尾部

例子:

ES5写法

let arr1 = [1, 2],
    arr2 = [3, 4];
[].push.apply(arr2, arr1);
console.log(arr2);
//输出:[3, 4, 1, 2]

ES6写法

let arr1 = [1, 2],
    arr2 = [3, 4];
arr2.push(...arr1);
console.log(arr2);
//输出:[3, 4, 1, 2]

5、展开类数组对象

例子:

ES5写法

console.log("love".split(""));
//输出:["l", "o", "v", "e"]

ES6写法

console.log([...
    "love"
]);
//输出:["l", "o", "v", "e"]

如有错误,欢迎指正,本人不胜感激。

点击查看更多内容
2人点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消