Javascript "new Array(n)" 與 map 的小陷阱。

這個小陷阱是我單純想要生 "n"個元素的一個array然後用map去隨機填值。後來查了一下map的說明才發現map只會對元素有assigned 值的才會去跑callback裡面的function

因此如果我用 new Array(n)的方式會先產生n個undefined pointer的Array,所以map根本不會去跑。然後又在stackoverflow發現個有個人問過類似的問題!請看這邊
x = new Array(3);
x.map(function(){ return 0; });
// [undefined, undefined, undefined]

x.constructor == y.constructor
// true

y = [undefined, undefined, undefined]
y.map(function(){ return 0; });
// [0,0,0]
問題在 x的生出來是undefined pointersy3個指向undefined的pointer所以map跑出來會是0的array。


回到正題~那我要用new Array(n)要怎麼辦?其實很簡單就是搭配fill()這個function然後接map()就可以了!

fill():就是把array填入一個值,有值之後map就能對所有元素作用了!

我的ES6的寫法就是:
dt = [...new Array(10)].fill(1).map(function(){return Math.floor(Math.random()*10+1);});
這樣就可以產生元素為10並且內容是隨機1~10的數字array 。


花了我不少時間在查為什麼會這樣.... 我果然在Javascript還是太嫩了 ><

REF:

  1. map說明。
  2. fill說明。
  3. stackoverflow的問題。

留言