JavaScript 中使用扩展运算符的 10 种方法
我相信您听说过 JavaScript 中的扩展运算符 (...),它是 JavaScript 提供的最强大的运算符之一,可以解决许多问题,例如您将在下面发现的 10 个问题。
扩展运算符可以用来解决你在 JavaScript 中可能遇到的多个问题。
在本文中,你将学习如何使用扩展运算符执行以下操作。
在基本形式中,扩展运算符看起来像三个点。
[...arr];
复制数组
我们可以使用扩展运算符来复制数组,但这仍然是一个浅克隆。
假设我们有一个名为的数组arr1
,我们想要克隆这个数组,称为arr2
。
const arr1 = [1,2,3];
const arr2 = [...arr1];
console.log(arr2);
// [ 1, 2, 3 ]
因此,我们可以通过这种方式复制一个基本数组,但请注意,它不适用于多级数组或带有日期或函数的数组。
合并数组
假设你有两个数组想要合并成一个,这种情况很常见,我们可以使用这个concat
方法。
扩展运算符可以让这个过程更简单,如下所示。
const arr1 = [1,2,3];
const arr2 = [4,5,6];
const arr3 = [...arr1, ...arr2];
console.log(arr3);
// [ 1, 2, 3, 4, 5, 6 ]
所以现在两个数组 (arr1, arr2) 被合并为arr3
。
您可以通过不同的排列方式来说明哪一个应该先出现。
const arr3 = [...arr2, ...arr1];
console.log(arr3);
[4, 5, 6, 1, 2, 3];
这是组合数组的好方法,可以添加的数量是无限的,因此您可以继续添加扩展运算符。
const output = [...arr1, ...arr2, ...arr3, ...arr4];
向数组添加一个项目
假设你有一个数组,但需要向其中添加一个或多个元素。
你可以使用 Array.push ,但扩展运算符也同样有效。
let arr1 = ['this', 'is', 'an'];
arr1 = [...arr1, 'array'];
console.log(arr1);
// [ 'this', 'is', 'an', 'array' ]
正如您所看到的,这会将新字符串添加到现有数组的末尾。
您甚至可以传递多个字符串。
arr1 = [...arr1, 'array', 'cool'];
console.log(arr1);
// [ 'this', 'is', 'an', 'array', 'cool' ]
向对象添加属性
假设您有一个用户对象,但它缺少年龄属性。
const user = {
firstname: 'Chris',
lastname: 'Bongers'
};
为了将年龄添加到这个用户对象,我们可以再次利用扩展运算符。
const output = {...user, age: 31};
上面发生的情况是,我们传播用户对象并age
为其添加一个名为 的新属性,其值为31
。
整个设置将如下所示。
const user = {
firstname: 'Chris',
lastname: 'Bongers'
};
const output = {...user, age: 31};
console.log(output);
// { firstname: 'Chris', lastname: 'Bongers', age: 31 }
使用 Math() 函数
假设您有一个数字数组,并且您想要获取这些数字的最低值、最高值或总和。
这是扩展运算符的另一个绝佳选择。
我们的输入数组将如下所示
const arr1 = [1, -1, 0, 5, 3];
为了获得最小数字,我们可以使用扩展运算符和Math.min method
。
const arr1 = [1, -1, 0, 5, 3];
const min = Math.min(...arr1);
console.log(min);
// -1
这将输出,-1
因为这是最低的数字,尝试从数组中删除 -1,你会看到最低的数字将变成0
。
为了获得最高数字,我们可以使用此Math.max
方法。
const arr1 = [1, -1, 0, 5, 3];
const max = Math.max(...arr1);
console.log(max);
// 5
正如您所见,最大值将会返回5
,如果我们删除5
它将会返回3
。
如果你好奇想知道如果我们不传播会发生什么:
const arr1 = [1, -1, 0, 5, 3];
const max = Math.max(arr1);
console.log(max);
// NaN
这将返回,NaN
因为 JavaScript 不知道数组的最大值是多少。
将数组展开为函数参数
假设我们有一个接受三个参数的函数。
const myFunc(x1, x2, x3) => {
console.log(x1);
console.log(x2);
console.log(x3);
}
我们可以按照以下方式调用此函数:
myFunc(1, 2, 3);
但是如果我们有一个想要传递的数组会发生什么情况呢?
const arr1 = [1, 2, 3];
我们现在可以使用扩展运算符将这个数组扩展至我们的函数中。
myFunc(...arr1);
// 1
// 2
// 3
如您所见,我们将数组分成三个单独的参数并传递给函数。
完整的调用如下:
const myFunc = (x1, x2, x3) => {
console.log(x1);
console.log(x2);
console.log(x3);
};
const arr1 = [1, 2, 3];
myFunc(...arr1);
// 1
// 2
// 3
向函数传递无限的参数
假设您有一个接受无限参数的函数,也许它们是您想要动态循环的属性。
const myFunc = (...args) => {
console.log(args);
};
如果我们现在使用多个参数调用此函数,我们会看到以下情况发生。
myFunc(1, 'a', new Date());
它将返回以下内容:
[
1,
'a',
Date {
__proto__: Date {}
}
]
然后我们就可以动态地循环参数。
将nodeList转换为数组
假设你使用扩展运算符获取了页面上的所有 div。它们将以 的形式出现nodeList
。
然后我们可以利用扩展运算符将其转换nodeList
为数组。
const el = [...document.querySelectorAll('div')];
console.log(el);
// (3) [div, div, div]
在这里你可以看到我们从 dom 中得到了三个 div。
我们现在可以轻松地循环这些元素,因为它们是数组格式。
const el = [...document.querySelectorAll('div')];
el.forEach(item => {
console.log(item);
});
// <div></div>
// <div></div>
// <div></div>
注意:如果您想了解有关循环 nodeList 结果的更多信息,请查看这篇文章。
解构对象
如果您熟悉解构对象,您可能会发现扩展运算符对于执行此操作非常有用。
假设我们再次为用户提供了一个对象。
const user = {
firstname: 'Chris',
lastname: 'Bongers',
age: 31
};
我们现在可以使用扩展运算符将其解构为单个变量。
const {firstname, ...rest} = user;
console.log(firstname);
console.log(rest);
// 'Chris'
// { lastname: 'Bongers', age: 31 }
如您所见,我们解析了用户对象并将名字解构为 firstname 变量,将对象的其余部分解构为rest
变量。
爆炸字符串
扩展运算符的最后一个用例是分解字符串。
假设我们有以下字符串。
const str = 'Hello';
如果我们对该字符串使用扩展运算符,我们将得到一个字母数组。
const str = 'Hello';
const arr = [...str];
console.log(arr);
// [ 'H', 'e', 'l', 'l', 'o' ]
瞧,这是一串字母。
我还直播了我撰写这篇文章的过程,您可以在 Youtube 上观看录像:
感谢您的阅读,让我们联系起来!
感谢您阅读我的博客。欢迎订阅我的电子邮件简报,并在Facebook或Twitter上与我联系。
文章来源:https://dev.to/dailydevtips1/10-ways-to-use-the-spread-operator-in-javascript-1imb