我正在寻找以下方法的任何替代方法,以创建包含1到N的JavaScript数组,其中N仅在运行时已知。
var foo = [];
for (var i = 1; i <= N; i++) {
foo.push(i);
}
对我来说,我觉得应该有一种不用循环的方法。
我正在寻找以下方法的任何替代方法,以创建包含1到N的JavaScript数组,其中N仅在运行时已知。
var foo = [];
for (var i = 1; i <= N; i++) {
foo.push(i);
}
对我来说,我觉得应该有一种不用循环的方法。
当前回答
让我们分享我的:p
Math.pow(2, 10).toString(2).split('').slice(1).map((_,j) => ++j)
其他回答
如果我得到了你想要的,你需要一个数字数组1..n,以后可以循环使用。
如果这就是你所需要的,你能代替它吗?
var foo = new Array(45); // create an empty array with length 45
然后当你想使用它时…(例如,未优化)
for(var i = 0; i < foo.length; i++){
document.write('Item: ' + (i + 1) + ' of ' + foo.length + '<br/>');
}
例如,如果你不需要在数组中存储任何东西,你只需要一个长度合适的容器,你可以遍历它。。。这可能更容易。
请在此处查看实际操作:http://jsfiddle.net/3kcvm/
获取n个介于最小值和最大值之间的随机数的数组(虽然不是唯一的)
function callItWhatYouWant(n, min, max) {
return Array.apply(null, {length: n}).map(Function.call, function(){return Math.floor(Math.random()*(max-min+1)+min)})
}
ES6中还有另一种方法,使用Array.from,它接受两个参数,第一个是arrayLike(在本例中是具有长度属性的对象),第二个是映射函数(在本示例中,我们将项映射到其索引)
Array.from({length:10}, (v,i) => i)
它更短,可用于生成偶数等其他序列
Array.from({length:10}, (v,i) => i*2)
此外,这比大多数其他方式具有更好的性能,因为它只在阵列中循环一次。查看截图以进行一些比较
//打开开发控制台以查看结果计数=100000console.time(“来自对象”)for(设i=0;i<count;i++){range=Array.from({length:10},(v,i)=>i)}console.timeEnd(“来自对象”)console.time(“来自按键”)for(设i=0;i<count;i++){range=Array.from(Array(10).keys())}console.timeEnd(“来自按键”)console.time(“应用”)for(设i=0;i<count;i++){range=Array.apply(null,{length:10}).map(函数(元素,索引){return index;})}console.timeEnd(“应用”)
function range(start, end) {
var foo = [];
for (var i = start; i <= end; i++) {
foo.push(i);
}
return foo;
}
然后由调用
var foo = range(1, 5);
在Javascript中没有内置的方法来实现这一点,但如果您需要多次执行,则可以创建一个非常有效的实用程序函数。
编辑:在我看来,以下是一个更好的范围函数。也许只是因为我对LINQ有偏见,但我认为它在更多情况下更有用。您的里程数可能有所不同。
function range(start, count) {
if(arguments.length == 1) {
count = start;
start = 0;
}
var foo = [];
for (var i = 0; i < count; i++) {
foo.push(start + i);
}
return foo;
}
空数组和数组中只有数字的解决方案
const arrayOne=新数组(10);console.log(arrayOne);const arrayTwo=[…数组(10).keys()];console.log(arrayTwo);var arrayThree=Array.from(Array(10).keys());console.log(arrayThree);const arrayStartWithOne=Array.from(Array(10).keys(),item=>item+1);console.log(arrayStartWithOne)