【问题标题】:Array with numbers 1-20 [duplicate]编号为 1-20 的数组 [重复]
【发布时间】:2013-10-20 15:55:10
【问题描述】:

我是 javascript 的新手。我之前正在解决一个问题,我需要一个包含数字 1 到 20 的数组。

我用以下方法做到了这一点:

var numberArray = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20];

问题:

我不禁认为这不是有效的(当然也不是可扩展的)。有没有办法创建一个自动填充 1 到 20 或 1 到 1000 之间的连续值的数组?

【问题讨论】:

  • 为什么不使用 for 循环而不是数组?
  • 你可以创建一个 for 循环,但你可以只使用一个 for 循环......你想做什么?
  • 是的,但结果听起来没什么用。
  • 如果您的FizzBuzz program 需要这个,答案是整个数组是不必要的(您可以将范围设置为整数并使用i+1 打印结果)。
  • 关键是你永远不需要一个规则的数组,因为你可以即时计算必要的值。

标签: javascript arrays


【解决方案1】:

这是一个单线:

var myArr = Array(20).join().split(',').map(function(a){return this.i++},{i:1});

或者稍微短一点:

var myArr = (''+Array(20)).split(',').map(function(){return this[0]++;}, [1]);

这两种方法都会创建一个空的 Array,其中包含 20 个空元素(即具有值 undefined 的元素)。在这样创建的Array 上,无法应用map 方法1,因此join(或字符串添加)和split 技巧对其进行了转换给知道它的Array。现在map 回调(参见 MDN 链接)只不过是为Array 的每个元素发送一个初始值({i:1}[1])的增量,然后myArr 包含从 1 到 20 的 20 个数值。

附录:ES20xx

[...Array(21).keys()].slice(1);

Array.map => See also...

1 为什么不呢?请参阅此SO answerthis one 以获得更深入的解释

【讨论】:

  • 哇,虽然我不明白它是如何工作的,但那真是太棒了。上面我得到的另一个答案是因为我使用了 for 循环。我将不得不深入研究这个:)
  • 嗨@PhilPowis,我在回答中添加了一些解释,希望对您有所帮助。
  • 非常好 - 在 10000000 次迭代中,效率大约是最有效的 for 循环解决方案的两倍,至少在 Chrome 中是这样。
  • @KooiInc 说 'Array(20) 不知道 map 方法' 有点令人困惑,map 方法实际上在那里 Array(20) .toString()===Array(20).map(function(a){return 'a'}).toString()(见stackoverflow.com/a/20333745/3116322
  • @Ande:是的,重新表述了答案,添加了您的链接和另一个
【解决方案2】:

你可以使用一个简单的循环来做你想做的事;

var numberArray = [];

for(var i = 1; i <= 20; i++){
    numberArray.push(i);
}

console.log(numberArray); 

【讨论】:

    猜你喜欢
    • 2012-02-18
    • 2018-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-15
    • 1970-01-01
    • 2012-06-28
    • 1970-01-01
    相关资源
    最近更新 更多