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

数组解构中的 SPREAD 运算符

数组解构中的 SPREAD 运算符

紫衣仙女 2022-06-16 10:02:32
在下面的示例中,未映射的数组项必须映射到左侧的 rest 参数,但由于某种原因输出不同,var planets = ["Mercury", "Earth", "Venus", "Mars", "Pluto", "Saturn"];var [first, second, ...rest] = ["Mercury", "Earth", ...planets, "Saturn"];console.log(first); //Output: Mercuryconsole.log(second); //Output: Earth现在对于下面,预期的输出是,console.log(rest); //Output: ["Venus", "Mars", "Pluto", "Saturn"]但实际输出是,console.log(rest); //Output: "Mercury", "Earth", "Venus", "Mars", "Pluto", "Saturn", "Saturn"来源:https ://www.freecodecamp.org/news/array-destructuring-in-es6-30e398f21d10/这里发生了什么事?
查看完整描述

3 回答

?
ABOUTYOU

TA贡献1812条经验 获得超5个赞

当您将行星传播到您的第二个阵列中时,您会将阵列中的所有元素planets放入第二个阵列中,因此:


["Mercury", "Earth", ...planets, "Saturn"];

...评估为:


["Mercury", "Earth", "Mercury", "Earth", "Venus", "Mars", "Pluto", "Saturn", "Saturn"];

然后你从这个数组中解构第一个和第二个元素给你"Mercury"和"Earth"。然后使用 rest 模式...rest检索剩余的元素(即从索引 2 开始的元素)并将它们存储在名为 的数组中rest。因此,您的rest数组包含上面数组中的所有元素,不包括第一个和第二个元素:


["Mercury", "Earth", "Venus", "Mars", "Pluto", "Saturn", "Saturn"]

要获得预期的输出,您可以通过忽略前两个元素来破坏第一个数组:


const [,,...rest] = ["Mercury", "Earth", "Venus", "Mars", "Pluto", "Saturn"];

console.log(rest);


查看完整回答
反对 回复 2022-06-16
?
慕森卡

TA贡献1806条经验 获得超8个赞

您可以有选择地传播。当您传播...planets它时,它将所有值从行星数组复制到您正在创建的数组中。


您可以在传播之前简单地使用切片。


var planets = ["Mercury", "Earth", "Venus", "Mars", "Pluto", "Saturn"];

var [first, second, ...rest] = ["Mercury", "Earth", ...planets.slice(2, planets.length - 1), "Saturn"];


console.log(first);

console.log(second);

console.log(rest)


查看完整回答
反对 回复 2022-06-16
?
30秒到达战场

TA贡献1828条经验 获得超6个赞

您可以使用Set()


Set 对象允许您存储唯一值


var planets = ["Mercury", "Earth", "Venus", "Mars", "Pluto", "Saturn"];

var [first, second, ...rest] = new Set(["Mercury", "Earth", ...planets, "Saturn"]);


console.log(first);

console.log(second);


console.log(rest);


查看完整回答
反对 回复 2022-06-16
  • 3 回答
  • 0 关注
  • 119 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号