什么是动态创建这个简单数组的最有效方法.
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);
小智 9
使用ES2015,可以使用如下Array.from方法在单个表达式中简洁地实现:
Array.from({ length: 10 }, (_, idx) => `${++idx}`)
Run Code Online (Sandbox Code Playgroud)
第一个参数from是一个像对象一样的数组,它提供了一个length属性.第二个参数是一个map函数,它允许我们undefined根据您的请求用其调整后的索引值替换默认值.在这里查看规范
这个答案是关于“如何动态创建一个没有循环的数组”。
文字运算符[]不允许我们动态创建,所以让我们看看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)
| 归档时间: |
|
| 查看次数: |
145956 次 |
| 最近记录: |