JavaScript 中使用扩展运算符的 10 种方法

2025-05-25

JavaScript 中使用扩展运算符的 10 种方法

我相信您听说过 JavaScript 中的扩展运算符 (...),它是 JavaScript 提供的最强大的运算符之一,可以解决许多问题,例如您将在下面发现的 10 个问题。

扩展运算符可以用来解决你在 JavaScript 中可能遇到的多个问题。
在本文中,你将学习如何使用扩展运算符执行以下操作。

在基本形式中,扩展运算符看起来像三个点。

[...arr];
Enter fullscreen mode Exit fullscreen mode

复制数组

我们可以使用扩展运算符来复制数组,但这仍然是一个浅克隆

假设我们有一个名为的数组arr1,我们想要克隆这个数组,称为arr2

const arr1 = [1,2,3];
const arr2 = [...arr1];
console.log(arr2);
// [ 1, 2, 3 ]
Enter fullscreen mode Exit fullscreen mode

因此,我们可以通过这种方式复制一个基本数组,但请注意,它不适用于多级数组或带有日期或函数的数组。

使用扩展运算符复制数组

注意:阅读有关 JavaScript 深度克隆的更多信息

合并数组

假设你有两个数组想要合并成一个,这种情况很常见,我们可以使用这个concat方法。
扩展运算符可以让这个过程更简单,如下所示。

const arr1 = [1,2,3];
const arr2 = [4,5,6];
const arr3 = [...arr1, ...arr2];
console.log(arr3);
// [ 1, 2, 3, 4, 5, 6 ]
Enter fullscreen mode Exit fullscreen mode

所以现在两个数组 (arr1, arr2) 被合并为arr3

您可以通过不同的排列方式来说明哪一个应该先出现。

const arr3 = [...arr2, ...arr1];
console.log(arr3);
[4, 5, 6, 1, 2, 3];
Enter fullscreen mode Exit fullscreen mode

这是组合数组的好方法,可以添加的数量是无限的,因此您可以继续添加扩展运算符。

const output = [...arr1, ...arr2, ...arr3, ...arr4];
Enter fullscreen mode Exit fullscreen mode

使用扩展运算符组合数组

向数组添加一个项目

假设你有一个数组,但需要向其中添加一个或多个元素。
你可以使用 Array.push ,但扩展运算符也同样有效。

let arr1 = ['this', 'is', 'an'];
arr1 = [...arr1, 'array'];
console.log(arr1);
// [ 'this', 'is', 'an', 'array' ]
Enter fullscreen mode Exit fullscreen mode

正如您所看到的,这会将新字符串添加到现有数组的末尾。

您甚至可以传递多个字符串。

arr1 = [...arr1, 'array', 'cool'];
console.log(arr1);
// [ 'this', 'is', 'an', 'array', 'cool' ]
Enter fullscreen mode Exit fullscreen mode

向数组添加一个项目

向对象添加属性

假设您有一个用户对象,但它缺少年龄属性。

const user = {
  firstname: 'Chris',
  lastname: 'Bongers'
};
Enter fullscreen mode Exit fullscreen mode

为了将年龄添加到这个用户对象,我们可以再次利用扩展运算符。

const output = {...user, age: 31};
Enter fullscreen mode Exit fullscreen mode

上面发生的情况是,我们传播用户对象并age为其添加一个名为 的新属性,其值为31

整个设置将如下所示。

const user = {
  firstname: 'Chris',
  lastname: 'Bongers'
};
const output = {...user, age: 31};
console.log(output);
// { firstname: 'Chris', lastname: 'Bongers', age: 31 }
Enter fullscreen mode Exit fullscreen mode

使用扩展运算符向对象添加属性

使用 Math() 函数

假设您有一个数字数组,并且您想要获取这些数字的最低值、最高值或总和。

这是扩展运算符的另一个绝佳选择。

我们的输入数组将如下所示

const arr1 = [1, -1, 0, 5, 3];
Enter fullscreen mode Exit fullscreen mode

为了获得最小数字,我们可以使用扩展运算符和Math.min method

const arr1 = [1, -1, 0, 5, 3];
const min = Math.min(...arr1);
console.log(min);
// -1
Enter fullscreen mode Exit fullscreen mode

这将输出,-1因为这是最低的数字,尝试从数组中删除 -1,你会看到最低的数字将变成0

为了获得最高数字,我们可以使用此Math.max方法。

const arr1 = [1, -1, 0, 5, 3];
const max = Math.max(...arr1);
console.log(max);
// 5
Enter fullscreen mode Exit fullscreen mode

正如您所见,最大值将会返回5,如果我们删除5它将会返回3

如果你好奇想知道如果我们不传播会发生什么:

const arr1 = [1, -1, 0, 5, 3];
const max = Math.max(arr1);
console.log(max);
// NaN
Enter fullscreen mode Exit fullscreen mode

这将返回,NaN因为 JavaScript 不知道数组的最大值是多少。

利用扩展运算符使用数学函数

将数组展开为函数参数

假设我们有一个接受三个参数的函数。

const myFunc(x1, x2, x3) => {
    console.log(x1);
    console.log(x2);
    console.log(x3);
}
Enter fullscreen mode Exit fullscreen mode

我们可以按照以下方式调用此函数:

myFunc(1, 2, 3);
Enter fullscreen mode Exit fullscreen mode

但是如果我们有一个想要传递的数组会发生什么情况呢?

const arr1 = [1, 2, 3];
Enter fullscreen mode Exit fullscreen mode

我们现在可以使用扩展运算符将这个数组扩展至我们的函数中。

myFunc(...arr1);
// 1
// 2
// 3
Enter fullscreen mode Exit fullscreen mode

如您所见,我们将数组分成三个单独的参数并传递给函数。

完整的调用如下:

const myFunc = (x1, x2, x3) => {
  console.log(x1);
  console.log(x2);
  console.log(x3);
};
const arr1 = [1, 2, 3];
myFunc(...arr1);
// 1
// 2
// 3
Enter fullscreen mode Exit fullscreen mode

使用扩展运算符将数组作为参数传递

向函数传递无限的参数

假设您有一个接受无限参数的函数,也许它们是您想要动态循环的属性。

const myFunc = (...args) => {
  console.log(args);
};
Enter fullscreen mode Exit fullscreen mode

如果我们现在使用多个参数调用此函数,我们会看到以下情况发生。

myFunc(1, 'a', new Date());
Enter fullscreen mode Exit fullscreen mode

它将返回以下内容:

[
  1,
  'a',
  Date {
    __proto__: Date {}
  }
]
Enter fullscreen mode Exit fullscreen mode

然后我们就可以动态地循环参数。

使用函数中的扩展接受无限的参数

将nodeList转换为数组

假设你使用扩展运算符获取了页面上的所有 div。它们将以 的形式出现nodeList
然后我们可以利用扩展运算符将其转换nodeList为数组。

const el = [...document.querySelectorAll('div')];
console.log(el);
// (3) [div, div, div]
Enter fullscreen mode Exit fullscreen mode

在这里你可以看到我们从 dom 中得到了三个 div。

我们现在可以轻松地循环这些元素,因为它们是数组格式。

const el = [...document.querySelectorAll('div')];
el.forEach(item => {
  console.log(item);
});
// <div></div>
// <div></div>
// <div></div>
Enter fullscreen mode Exit fullscreen mode

注意:如果您想了解有关循环 nodeList 结果的更多信息,请查看这篇文章。

将nodeList结果转换为数组

解构对象

如果您熟悉解构对象,您可能会发现扩展运算符对于执行此操作非常有用。

假设我们再次为用户提供了一个对象。

const user = {
  firstname: 'Chris',
  lastname: 'Bongers',
  age: 31
};
Enter fullscreen mode Exit fullscreen mode

我们现在可以使用扩展运算符将其解构为单个变量。

const {firstname, ...rest} = user;
console.log(firstname);
console.log(rest);
// 'Chris'
// { lastname: 'Bongers', age: 31 }
Enter fullscreen mode Exit fullscreen mode

如您所见,我们解析了用户对象并将名字解构为 firstname 变量,将对象的其余部分解构为rest变量。

使用扩展来解构对象

爆炸字符串

扩展运算符的最后一个用例是分解字符串。

假设我们有以下字符串。

const str = 'Hello';
Enter fullscreen mode Exit fullscreen mode

如果我们对该字符串使用扩展运算符,我们将得到一个字母数组。

const str = 'Hello';
const arr = [...str];
console.log(arr);
// [ 'H', 'e', 'l', 'l', 'o' ]
Enter fullscreen mode Exit fullscreen mode

瞧,这是一串字母。

使用扩展运算符展开字符串

我还直播了我撰写这篇文章的过程,您可以在 Youtube 上观看录像:

感谢您的阅读,让我们联系起来!

感谢您阅读我的博客。欢迎订阅我的电子邮件简报,并在FacebookTwitter上与我联系。

文章来源:https://dev.to/dailydevtips1/10-ways-to-use-the-spread-operator-in-javascript-1imb
PREV
使用 JavaScript 代理 proxy-pants 检测对象变化
NEXT
GraphQL 和全栈无服务器时代的基础设施即代码