這個小陷阱是我單純想要生 "n"個元素的一個array然後用map去隨機填值。後來查了一下map的說明才發現map只會對元素有assigned 值的才會去跑callback裡面的function。
因此如果我用 new Array(n)的方式會先產生n個undefined pointer的Array,所以map根本不會去跑。然後又在stackoverflow發現個有個人問過類似的問題!請看這邊。
回到正題~那我要用new Array(n)要怎麼辦?其實很簡單就是搭配fill()這個function然後接map()就可以了!
fill():就是把array填入一個值,有值之後map就能對所有元素作用了!
我的ES6的寫法就是:
花了我不少時間在查為什麼會這樣.... 我果然在Javascript還是太嫩了 ><
REF:
因此如果我用 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 pointers而y是3個指向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:
留言
張貼留言