それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

Array(10) がundefined になる問題。

js で要素が空っぽの配列10個作ってループ変数代わりに使ってみよう

forループとかダルいよねと思って。10個ループ変数してみたら。。。

Array(10).forEach( (e)=>{ console.log(e) } )
//=> undefined

あれ?なんで?

map で初期化したら?

Array(10).map( (x)=>{return 1} )
[undefined × 10]

あれ?出来ない。

配列の長さは10だよね?

うん、配列長は指定通りなんですね、

Array(10).length
//=> 10 

あれ?

undefined の扱いの問題かな?

Array(10)[100]
//=> undefined

Array(10) はこういうこと

Arrayの第一引数に数値を指定すると、次のような動作になってるみたい。

a = new Array()
a.length = 10
a.map( (x) =>{ return 1 });
//=>[undefined × 10]

解決策

Array(10).fill(1)

あまり美しくないけど、どこでも使えるといえばこうなる。

Array.prototype とか追いかけて、深入りすると沼に嵌りそう。

関連資料

JavaScript で 100.times( alert ) するrangeっぽいものも - それマグで!

参考資料

JavaScript - new Array(len)と[undefined, ...]の違い - Qiita