创建这个简单数组的最有效方法是什么?
var arr = [ "1", "2", "3", "4", "5", "6", "7", "8", "9", "10"];
假设我们可以从一个变量中得到数字10
var mynumber = 10;
创建这个简单数组的最有效方法是什么?
var arr = [ "1", "2", "3", "4", "5", "6", "7", "8", "9", "10"];
假设我们可以从一个变量中得到数字10
var mynumber = 10;
var arr = [];
for(var i=1; i<=mynumber; i++) {
arr.push(i.toString());
}
更新:像这样的微优化并不值得,现在的引擎都非常智能,在2020年我建议只需使用
var arr = [];
。
以下是我的实现方式:
var mynumber = 10;
var arr = new Array(mynumber);
for (var i = 0; i < mynumber; i++) {
arr[i] = (i + 1).toString();
}
我的答案与众不同之处在于,我做了一些不同的事情:
所以我使用 new Array(mynumber);
创建了数组。
Array.from({length: 10}) // -> [undefined, undefined, undefined, ... ]
当数组的构造函数接收数字作为第一个参数时,它将创建一个具有该数字大小的数组,但它不可迭代,因此我们无法使用.map()
、.filter()
等方法:
new Array(10) // -> [empty × 10]
但是,如果我们传递多个参数,我们将收到所有参数的数组:
new Array(1,2,3) // -> [1,2,3]
[...new Array(10)] // -> [undefined, undefined, undefined, ...]
但是如果我们不使用ES2015并且没有polyfills,也可以在ES5中创建动态数组而无需循环。如果我们考虑.apply()
方法:它会将第二个参数数组扩展为参数。因此,在Array的构造函数上调用apply就可以完成这个任务:
Array.apply(null, new Array(10)) // -> [undefined, undefined, undefined, ...]
Array.apply(null, new Array(10)).map(function(el, i) {return ++i + ""})
// ["1","2","3", ...]
var arr = [];
for (var i = 1; i <= mynumber; i++) arr.push(""+i);
如果您想要更有趣的版本,可以使用一个生成器...
function tail(i, maxval) {
return [i].concat(i < maxval ? tail(i+1, maxval) : []);
}
var arr = tail(1, mynumber);
var arr = [];
while(mynumber--) {
arr[mynumber] = String(mynumber+1);
}
arr=arr.join('_').split('_');
并且移除 String(<number>)
步骤。 - Erik Reppenvar num = 10,
dynar = [...Array(num)].map((_,i) => ++i+"");
console.log(dynar);
由于之前的回答都没有提供使用 repeat
生成动态数组的解决方案,因此在这里为您提供:
使用 repeat
生成包含十个数字的动态数组:
[...'x'.repeat(10).split('').keys()]
// [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
只需将所有元素的键加一(因为数组是从零开始)并通过字符串字面量或
var arr = [ "1", "2", "3", "4", "5", "6", "7", "8", "9", "10"];
.toString()
甚至只需将空格添加到数字''+x
来将数字转换为字符串。let mynumber = 10;
const keys = [...'x'.repeat(mynumber).split('').keys()]
const arr = keys.map(x=>`${x+1}`);
//['1', '2', '3', '4', '5', '6', '7', '8', '9', '10']
[...Array(10).keys()].map(() => Math.floor(Math.random() * 100))
Array.from({length:10}, _=>-~(Math.random() * 100))
这段代码。 - undefined误读了问题,已更正。请尝试:
var myNumber = 100,
myarr = (function arr(i){return i ? arr(i-1).concat(i) : [i]}(myNumber));
只是为了好玩,如果你像这样扩展Array
:
Array.prototype.mapx = function(callback){
return String(this).split(',').map(callback);
}
您可以使用:
var myNum = 100,
myarr = new Array(myNum).mapx(function(el,i){return i+1;});
mynumber = 100;
。请为我编写长字符串。 - Selvakumar Arumugam