2016-03-19 78 views
2

我是從一個叫「雄辯的Javascript的書學習JavaScript雄辯的Javascript:練習:名單

我試圖解決此處描述的鍛鍊:http://eloquentjavascript.net/04_data.html#h_nSTX34CM1M

我設法制定出這個代碼工作原理:

function arrayToList(array) { 

    var list = null; 

    for (var i = array.length - 1; i >= 0; i--) 
    list = { 
     value: array[i], 
     rest: list 
    }; 
    return list; 
} 

console.log(arrayToList([1, 2, 3])); 

結果:{值:1,其餘:{值:2,其餘:{值:3,其餘:空}}}

到目前爲止,那麼好,並且根據噸o這本書是正確的解決方案。但!

當我嘗試運行同樣的事情,而是與一個較長的陣列,讓我們說:

console.log(arrayToList([1, 2, 3, 4, 5])); 

結果是:{值:1,休息:{值:2,休息:{值: 3,rest:[Object]}}}

這是爲什麼?我的代碼錯了嗎?

+0

你在nodejs中執行這個嗎?還是瀏覽器控制檯? – Bergi

+0

Windows PowerShell中的nodejs –

+0

是的,看起來像這樣:-)節點在展開它打印的對象時受到限制;在瀏覽器/調試器中,您通常可以交互式地展開它們。 – Bergi

回答

4

長陣列沒有問題。 console.log()是一個非標準的,特定於瀏覽器的實現,一些實現爲它們將顯示的對象嵌套的級別設置上限。當他們達到這個水平時,他們只顯示[Object]而不是遞歸到它顯示更深的嵌套。

如果你真的在調試器中設置了一個斷點並檢查了你的變量,你會發現你可以擴展嵌套的層次並且看到所有的東西。

或者,你可以這樣做:

console.log(JSON.stringify(arrayToList([1, 2, 3, 4, 5]))); 

整個事情手動轉換爲字符串就可以使用console.log()之前。

+0

你剛剛打敗我+1 –

+0

OP可以'JSON.stringify'結果來獲得更大的圖片。 – Andy

+0

哦!那很簡單吧?非常感謝你! –