LoginSignup
7
13

More than 5 years have passed since last update.

JavaScriptで連番・等差数列・等比数列の入った配列を簡単につくる(GoogleAppsScript対応版)

Last updated at Posted at 2017-05-01

[0, 1, 2, 3][1, 2, 4, 8, 16] のような配列をなるべく1行で作りたい時のメモ

  • コツ
    • 種となる配列をnew Array(num)で作成するのではなくArray.apply(null,new Array(num))で作成する
    • new Array(num)で作成してしまうとmapが反応してくれません

連番

  • 長さ20の0から始まる連番をつくってarrに入れる
var length=20;
var start=0;
var arr = Array.apply(null,new Array(length)).map(function(v,i){ return start+i;});
  • 結果
[0.0, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0, 13.0, 14.0, 15.0, 16.0, 17.0, 18.0, 19.0]

等差数列

  • 長さ20で、初項4、公差2の等差数列をつくってarrに入れる
var length=20;
var initial=4;
var diff=2;
var arr = Array.apply(null,new Array(length)).map(function(v,i){ return initial+(i*diff);});
  • 結果
[4.0, 6.0, 8.0, 10.0, 12.0, 14.0, 16.0, 18.0, 20.0, 22.0, 24.0, 26.0, 28.0, 30.0, 32.0, 34.0, 36.0, 38.0, 40.0, 42.0]

等比数列

  • 長さ20で、初項4、公比2の等比数列をつくってarrに入れる
var length=20;
var initial=4;
var ratio=2;
var arr = Array.apply(null,new Array(length)).map(function(v,i){ return initial*Math.pow(ratio,i);});
  • 結果
[4.0, 8.0, 16.0, 32.0, 64.0, 128.0, 256.0, 512.0, 1024.0, 2048.0, 4096.0, 8192.0, 16384.0, 32768.0, 65536.0, 131072.0, 262144.0, 524288.0, 1048576.0, 2097152.0]

解説

  • new Array(length).mapでは駄目な理由
  • Array.apply(null,new Array(length)).mapならよい理由
    • Array.apply(null,new Array(3))Array(null,null,null)のように解釈されます
    • この結果、[null, null, null]のように 各要素にnullが入った 配列が生成されます。
    • mapは値の入っている要素であれば(それがnullであっても)反応するため、Array.apply(null,new Array(3)).map(~)とすれば、各要素に対してmapによる処理が実行されます。
7
13
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
13