//判斷是不是數組 let isArr = (arr) => (arr instanceof Array) //判斷是否一維數組 let isTdim = (arr) => arr.reduce((o1, o2) => o1&&!isArr(o2), true) //多維數組變一維數組 let flat = (arr) => isTdim(arr) ? arr : flat(Array.prototype.concat.apply([],arr))
這裏apply
函數接受的arr
數組個數若是太過會出現問題。在node上測試,120000之內均可以,大於130000,就報錯了。chrome上會高一點。node
function name() { var a = [] for (var i = 0; i < 11; i++) { a[i] = function(){return i} } return a } console.log(name()[0]())
上面這個函數會輸出意外的結果:11.這裏再也不費力地解釋爲何會出現這種反人性的結果。只是給出正確而不拗口的寫法,只要把var
變成let
就能夠了chrome
function name() { var a = [] for (let i = 0; i < 11; i++) { a[i] = function(){return i} } return a } console.log(name()[0]())
若是你擔憂瀏覽器不支持let
,那就用babel轉一下,babel會把let轉換成var而不出現做用域提高的問題。數組