JavaScript去结构化和扩展操作符--用示例代码解释

61 阅读6分钟

JavaScript有两个很棒的数据结构,可以帮助你写出简洁高效的代码。但处理它们有时会变得很混乱。

在这篇博客中,我将向你展示如何在JavaScript中处理数组和对象的析构。我们还将学习如何使用传播操作符。

让我们深入了解一下。

什么是JavaScript中的数组析构?

假设我们有一个包含五个数字的数组,像这样:

let array1 = [1, 2, 3, 4, 5]

包含五个数字的数组

为了从数组中获取元素,我们可以做一些事情,比如根据索引来获取数字:

array1[0];
array1[1];
array1[2];
array1[3];
array1[4];

获取数组元素

但是这种方法很老套,而且很笨重,有一种更好的方法--使用数组析构。它看起来像这样:

let [ indexOne, indexTwo, indexThree, indexFour, indexFive ] = array1;

使用数组解构

上面两种方法都会产生相同的结果:

现在,我们在数组中有五个元素,我们打印这些元素。 但是如果我们想在中间跳过一个元素呢?

let [ indexOne, indexTwo, , indexFour, indexFive ] = array1;

在这里,我们跳过了indexThird ,在indexTwo和indexFour之间有一个空位。

let [ indexOne, indexTwo, , indexFour, indexFive ] = array1;

console.log(indexOne);
console.log(indexTwo)
console.log(indexFour)
console.log(indexFive)

跳过第三个元素

你可以看到,我们没有得到第三个元素,因为我们已经把它设置为空。

什么是JavaScript中的对象重构?

这种析构对对象也很有效。让我给你举个例子。

let object = {
    name: "Nishant",
    age: 24, 
    salary: 200,
    height: '20 meters',
    weight: '70 KG'
}

一个JavaScript对象

假设我们想把这个对象的名字、工资和体重在控制台中打印出来:

console.log(object.name)
console.log(object.salary)
console.log(object.weight)

从对象中获取姓名、工资和体重

我们可以使用键来获取它们,这些键是姓名、工资和体重。

但是这段代码有时会变得难以理解。这时,解构就派上用场了。

let { name, salary, weight } = object;

console.log(name)
console.log(salary)
console.log(weight)

解构对象

而现在,我们可以直接记录姓名、工资和体重,而不是使用那种老方法:

如果对象中不存在值,我们也可以使用去结构化来设置默认值:

let object = {
    name: "Nishant",
    age: 24, 
    height: '20 meters',
    weight: '70 KG'
}

let { name, salary, weight } = object;

console.log(name)
console.log(salary)
console.log(weight)

在这里,我们有名字和体重存在于对象中,但没有工资。

我们将得到一个未定义的工资值。

为了纠正这个问题,我们可以在解构对象时设置默认值。

let object = {
    name: "Nishant",
    age: 24, 
    height: '20 meters',
    weight: '70 KG'
}

let { name, salary = 200, weight } = object;

console.log(name)
console.log(salary)
console.log(weight)

设置薪金的默认值

你可以看到,我们得到了200作为工资。这只在我们的对象中没有这个键,而我们想设置一个缺省值时才有效。

let object = {
    name: "Nishant",
    age: 24, 
    salary: 300,
    height: '20 meters',
    weight: '70 KG'
}

let { name, salary = 200, weight } = object;

console.log(name)
console.log(salary)
console.log(weight)

在对象中添加salary,你将得到300作为工资。

如何在函数中使用对象重构

假设我们有一个函数,将数组中的所有数据打印到控制台。

let object = {
    name: "Nishant",
    age: 24, 
    salary: 300,
    height: '20 meters',
    weight: '70 KG'
}

function printData(){
    
}

printData(object)

在控制台打印数据的函数

当函数被调用时,我们将对象作为一个参数传给它。

let object = {
    name: "Nishant",
    age: 24, 
    salary: 300,
    height: '20 meters',
    weight: '70 KG'
}

function printData(object){
    console.log(object)
}

printData(object)

通常情况下,我们会做这样的事情--传递对象并在控制台中记录它。

但同样地,我们也可以使用去结构化来做同样的事情。

let object = {
    name: "Nishant",
    age: 24, 
    salary: 300,
    height: '20 meters',
    weight: '70 KG'
}

function printData({name, age, salary, height, weight}){
    console.log(name, age, salary, height, weight)
}

printData(object)

在函数中使用去结构化

在这里,我们在函数参数中把对象去结构化为姓名、年龄、工资、身高和体重,并在同一行中打印所有内容。

你可以看到去结构化是如何使它变得如此容易理解的。

使用去结构化打印对象数据

让我们来看看最后一个例子。

function sample(a, b) {
    return [a + b, a * b]
}

let example = sample(2, 5);
console.log(example)

两个数字相加和相乘的函数

我们这里有一个接受两个数字的函数。它返回一个数组,将它们相加和相乘,并将它们记录到控制台。

让我们在这里用去结构化来代替。

我们可以像这样把它分解成加法和乘法的变量。

let [addition, multiplication] = sample(2, 5);
console.log(addition)
console.log(multiplication)

使用去结构化

在输出中,你可以看到我们得到两个数字的加法乘法

什么是JavaScript中的扩展运算符?

展开的意思是展开或扩大。而JavaScript中的展开运算符是由三个点表示的。

这个扩展运算符有很多不同的用途。让我们逐一看看。

展开运算符的例子

假设我们有两个数组,我们想把它们合并起来。

let array1 = [1, 2, 3, 4, 5]
let array2 = [6, 7, 8, 9, 10]

let array3 = array1.concat(array2);
console.log(array3)

用concat方法合并两个数组

我们将得到两个数组的组合,即array1和array2。

但是有一个更简单的方法可以做到这一点。

let array1 = [1, 2, 3, 4, 5]
let array2 = [6, 7, 8, 9, 10]

let array3 = [...array1, ...array2]
console.log(array3)

用传播操作符合并两个数组

在这种情况下,我们使用传播操作符来合并两个数组。

你可以看到,我们将得到相同的输出。

让我们设想另一个用例,我们必须在数组2的元素之间插入数组1

例如,我们想在数组1的第二和第三元素之间插入数组2

那么,我们如何做到这一点呢?我们可以这样做。

let array1 = [1, 2, 3, 4, 5]
let array2 = [6, 7, ...array1, 8, 9, 10]

console.log(array2);

在array2的7和8之间插入array1

你可以看到,我们得到数组1的元素在7和8之间。

现在,让我们用传播操作符把两个对象合并起来。

let object1 = {
    firstName: "Nishant",
    age: 24, 
    salary: 300,
}

let object2 = {
    lastName: "Kumar",
    height: '20 meters',
    weight: '70 KG'
}

两个准备合并的对象

我们这里有两个对象。一个包含名字、年龄和工资。第二个对象包含lastName、身高和体重。

让我们把它们合并在一起:

let object1 = {
    firstName: "Nishant",
    age: 24, 
    salary: 300,
}

let object2 = {
    lastName: "Kumar",
    height: '20 meters',
    weight: '70 KG'
}

let object3 = {...object1, ...object2}
console.log(object3);

将这两个对象合并为第三个对象

现在我们已经使用传播操作符合并了这两个对象,我们已经在控制台中记录了这个值:

合并以前的对象

你可以看到,我们得到的是两个对象的组合。

最后,我们还可以使用传播操作符将一个数组复制到另一个数组中。让我告诉你它是如何工作的:

let array1 = [1, 2, 3, 4, 5]
let array2 = [...array1]
console.log(array2);

将数组1复制到数组2中

在这里,我们使用传播操作符将数组1复制到数组2

我们在控制台中记录数组2 ,并获得数组1的项目。

总结

就这样了,伙计们!在这篇文章中,我们了解了数组和对象的重构以及传播操作符。

如果你想补充学习,你也可以观看我在Youtube上拍摄的关于数组和对象析构以及扩散操作符的视频。

学习愉快