2014-09-02 74 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