

Rubyでは3から6の値を持った配列を作るには以下のようにできます。

[code]

    irb(main):001:0> [*3..6]
    => [3, 4, 5, 6]
    
[/code]

これをJSで実現するにはどうしたらいいのでしょうか。


CC BY-SA 4.0
2019-06-27T11:01:26.680
56141
2019-12-11T05:03:00.477
32878
question
javascript
JavaScriptで特定の範囲の数値の配列を作りたい


あまり得意ではないですが、回答がないようですので回答致します。  
Rubyのように連番を表現する方法はないようです。  
以下で実現が可能でした。

[code]

    start = 3
    end = 6
    new Array(end - start + 1).fill(null).map((_, i) => i + start)
    // [3, 4, 5, 6]
    
[/code]

以下が参考になりましたので記載しておきます。  
<https://qiita.com/Nossa/items/e420c15175d87cec079e>


CC BY-SA 4.0
2019-06-28T06:58:24.077
56176
2019-06-28T06:58:24.077
13022
56141
answer


ひとつの方法として、 `Array.prototype.keys` メソッドと `Array.prototype.map` メソッドを用いる方法があります。

[code]

    {
      const start = 3;
      const end = 6;
      [...Array(end - start + 1).keys()].map(e => e + start); //=> Array(4) [ 3, 4, 5, 6 ]
    }
    
[/code]

既に似た方法の回答がありますが、`Array.prototype.fill` メソッドと `Array.prototype.map`
メソッドを用いることも出来ます。

[code]

    {
      const start = 3;
      const end = 6;
      Array(end - start + 1).fill(start).map((x, y) => x + y); //=> Array(4) [ 3, 4, 5, 6 ]
    }
    
[/code]

また、`Array.from` メソッドを用いることも出来ます。

[code]

    {
      const start = 3;
      const end = 6;
      Array.from(Array(end - start + 1), (_, i) => i + start); //=> Array(4) [ 3, 4, 5, 6 ]
    }
    
[/code]

スプレッド構文とジェネレータを用いる方法もあります。

[code]

    {
      const start = 3;
      const end = 6;
      [...(function* (x, y) { while (x <= y) yield x++})(start, end)]; //=> Array(4) [ 3, 4, 5, 6 ]
    }
    
[/code]


CC BY-SA 4.0
2019-06-28T08:47:35.670
56183
2019-06-28T08:47:35.670
32986
56141
answer


`Array.prototype` 系は既に最適化されつくしているので、別の側面から。  
多くの `Array.prototype` メソッドは **値のある要素だけを処理する** ので、事前に値を代入する必要があります。

  1. `Array()` で配列生成
  2. SpreadElement, `Array.from()`, `Array.prototype.fill` で **値を初期化**
  3. `Array.prototype.****` メソッド処理 (ループ回数 = n * 2 回)

ループ回数を `n` 回にするには、次のように書きます。

[code]

    {
      const start = 3, end = 6;
      const result = [];
      for (let i = start; i <= end; i++) result.push(i);
      console.log(result);  // [3, 4, 5, 6]
    }
    
    {
      const start = 3, end = 6;
      const result = [];
      let i = start;
      while (i <= end) result.push(i++);
      console.log(result);  // [3, 4, 5, 6]
    }
    
[/code]

誰もが知っている標準的な「繰り返し構文」ですが、癖のないシンプルなコードと思います。

Re: user11343782 さん


CC BY-SA 4.0
2019-06-30T08:58:19.867
56253
2019-06-30T08:58:19.867
20262
56141
answer