Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/405.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript JS使用arrow函数和rest参数创建数组_Javascript_Arrays_Ecmascript 6 - Fatal编程技术网

Javascript JS使用arrow函数和rest参数创建数组

Javascript JS使用arrow函数和rest参数创建数组,javascript,arrays,ecmascript-6,Javascript,Arrays,Ecmascript 6,在一个应用程序中,我看到了这部分代码: const arrayCreate = length => [...Array(length)]; 它起作用了,但我不知道怎么做。我们有一个arrow函数,它接受一个长度参数,并在数组中创建一个数组,或者什么?:) spread操作符在这里做什么?数组(长度)将创建一个长度空槽的数组,但不能使用.map.forEach等数组方法对其进行映射或迭代 当您将(…)带有空插槽的阵列展开时,它将为每个阵列位置创建一个带有未定义的的新阵列。因此,您现在可以.

在一个应用程序中,我看到了这部分代码:

const arrayCreate = length => [...Array(length)];
它起作用了,但我不知道怎么做。我们有一个arrow函数,它接受一个长度参数,并在数组中创建一个数组,或者什么?:) spread操作符在这里做什么?

数组(长度)
将创建一个
长度
空槽的数组,但不能使用
.map
.forEach
等数组方法对其进行映射或迭代

当您将(
)带有空插槽的阵列展开时,它将为每个阵列位置创建一个带有
未定义的
的新阵列。因此,您现在可以
.map
.forEach
了,因为它们不是空插槽

因此,这是一种创建长度为
的数组的方法,数组中填充
未定义的

你也可以这样做

Array(length).fill()


有趣!开发人员可能希望在索引中写入第一个值时优化性能,或者能够遍历空值

数组是具有以下属性的javascript对象:

  • 分别分配给数组索引/索引处的值的键/值对
  • 长度(数组的大小)
  • 原型(getter、setter、数组方法…)
数组(长度)
新数组(长度)
返回
{length:0,prototype:{}
。对象为空,长度等于传入的
length


现在
[…数组(长度)]
将返回
{0:undefined,1:undefined,2:undefined:3:undefined,4:undefined,5:undefined,length:5,prototype:{}
。属性现在被分配给它们的
未定义的

@Gabrielse的帖子很好地回答了这个问题。不过,我想补充一点

在一个用例中,您可以执行类似于的操作,即当您有一个
集合
iterable,并且希望它的元素位于数组中时。例如

const set = new Set();
set.add('foo');
set.add('bar');
set.add('baz');
假设您将项目
foo
bar
baz
放在一个集合中。一个简单的
console.log(set)将导致
设置{'foo','bar','baz'}
。你得到的结果当然是一个集合。但是如果您希望这些项目在一个数组中呢


一种简单的方法是使用
(扩展运算符)应用于数组中的
集合。
console.log([…set])的结果将与
['foo','bar','baz']

相关这是否回答了您的问题
arrayCreate(length)
是执行
Array(length)
的一种循环方式。在这两种情况下,您都将得到一个长度为
length
的数组,其中填充了
null
s。不过,这不是一个非常有用的函数,因为它用
未定义的
填充数组(不是
空的
,也不等同于根本没有填充的
数组(长度)
。@cars10m)。创建填充有可操作内容的数组的更有用的方法是表达式。
const set = new Set();
set.add('foo');
set.add('bar');
set.add('baz');