javascript - 创建简单动态数组

Sam*_*Sam 24 javascript

什么是动态创建这个简单数组的最有效方法.

var arr = [ "1", "2", "3", "4", "5", "6", "7", "8", "9", "10"];
Run Code Online (Sandbox Code Playgroud)

假设我们可以从变量得到数字10

var mynumber = 10;
Run Code Online (Sandbox Code Playgroud)

Nad*_*adh 57

var arr = [];
for(var i=1; i<=mynumber; i++) {
   arr.push(i.toString());
}
Run Code Online (Sandbox Code Playgroud)


aja*_*221 12

我将如何做到这一点:

var mynumber = 10;
var arr = new Array(mynumber);

for (var i = 0; i < mynumber; i++) {
    arr[i] = (i + 1).toString();
}
Run Code Online (Sandbox Code Playgroud)

我的答案几乎与每个人的答案相同,但请注意我做了一些不同的事情:

  • 如果指定数组长度更好,并且不要每次都强制它扩展

所以我创建了数组 new Array(mynumber);

  • 为什么在每次迭代时扩展数组是不好的/不推荐的?它会影响内存分配或存储值所需的时间吗?你能详细说明一下缺点吗? (3认同)

小智 9

使用ES2015,可以使用如下Array.from方法在单个表达式中简洁地实现:

Array.from({ length: 10 }, (_, idx) => `${++idx}`)
Run Code Online (Sandbox Code Playgroud)

第一个参数from是一个像对象一样的数组,它提供了一个length属性.第二个参数是一个map函数,它允许我们undefined根据您的请求用其调整后的索引值替换默认值.在这里查看规范


Ant*_*nko 7

这个答案是关于“如何动态创建一个没有循环的数组”。

文字运算符[]不允许我们动态创建,所以让我们看看Array,它是构造函数和方法。

在 ES2015 Array 中有 method .from(),它允许我们轻松地创建动态数组:

Array.from({length: 10}) // -> [undefined, undefined, undefined, ... ]
Run Code Online (Sandbox Code Playgroud)

当 Array 的构造函数接收 number 作为第一个参数时,它会创建一个具有该数字大小的 Array,但它不可迭代,因此我们不能使用.map(), .filter()etc. :

new Array(10) // -> [empty × 10]
Run Code Online (Sandbox Code Playgroud)

但是如果我们传递多个参数,我们将从所有参数接收数组:

new Array(1,2,3) // -> [1,2,3]
Run Code Online (Sandbox Code Playgroud)

如果我们使用 ES2015,我们可以使用扩展运算符,它将空数组扩展到另一个数组中,因此我们将获得可迭代的数组:

[...new Array(10)]  // -> [undefined, undefined, undefined, ...]
Run Code Online (Sandbox Code Playgroud)

但是如果我们不使用 ES2015 并且没有 polyfills,那么在 ES5 中还有一种方法可以创建无循环的动态数组。如果我们考虑.apply()方法:它将第二个参数数组传播到 params。因此,在 Array 的构造函数上调用 apply 将执行以下操作:

Array.apply(null, new Array(10))  // -> [undefined, undefined, undefined, ...]
Run Code Online (Sandbox Code Playgroud)

有了动态可迭代数组后,我们可以使用 map 来分配动态值:

Array.apply(null, new Array(10)).map(function(el, i) {return ++i + ""})

// ["1","2","3", ...]
Run Code Online (Sandbox Code Playgroud)