2014-09-02 77 views
1

我有一個關於下劃線的減少行爲與對象的問題。下劃線_.reduce行爲與對象

假定下列對象:

var data = [ { type: "A", val: 2 }, 
      { type: "B", val: 3 }, 
      { type: "R", val: 3 }, 
      { type: "L", val: 3 }, 
      { type: "R", val: 3 }, 
      { type: "A", val: 1 }, 
      { type: "B", val: 5 } ]; 

和以下功能:

output = _(data).reduce(function(mem, d) { 

       console.log(mem); 
       mem[d.type] = d.type; 

       return mem 
     }, {}); 

在控制檯的輸出爲所有8次迭代是:

Object { A: "A", B: "B", R: "R", L: "L" } 

1)爲什麼發生這種情況時,不應該讓第一個輸出爲空,因爲我已經將它作爲我的初始狀態了嗎?

2)爲什麼所有的獨特類型似乎都是從第一次迭代中找到的?

任何幫助,將不勝感激,謝謝。

+0

你登錄的對象然後在下一次迭代中更改它;這是對象在瀏覽器中登錄的方式的問題,而不是「reduce」的工作方式。 – Mathletics 2014-09-02 20:40:43

+0

你實際上並沒有使用_.reduce,你正在使用[] .reduce ... – dandavis 2014-09-02 20:41:11

+0

@dandavis,不管是什麼'_',這與手邊的問題無關。 – 2014-09-02 20:44:54

回答

0

你的代碼沒有問題。

問題是,您的控制檯不會自動展開對象,直到您單擊小三角形來展開該對象。它顯示了一個截斷的參考到對象,直到展開對象纔會變爲真實。

看到這一點,看看這個系列的截圖:

我設置對象:http://i.imgur.com/nTU3Ld0.png

然後我擴大,從第一輸出控制檯:http://i.imgur.com/NCCpgfd.png

+0

哇,我在發佈前檢查過Chrome和Firefox。看着它在螢火蟲和羅,看它是給予預期的行爲。謝謝您的幫助。 – clery00 2014-09-02 20:54:20