多維數組變一維數組

//判斷是不是數組
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而不出現做用域提高的問題。數組

相關文章
相關標籤/搜索