2
我试图压平已在它的两个对象的对象,所以我做了以下内容:为什么underscore.reduce在这两种情况下的行为不同?
var underscore = require('underscore');
var obj = { a: {x:1}, b: {y:2}};
underscore.reduce(obj, underscore.extend, {});
没想到,我已经得到了输出:
{
'0': 'b',
x: 1,
a: { x: 1 },
b: { y: 2 },
y: 2
}
于是我已经试过在一个函数来包装extend
:
underscore.reduce(obj, function(memo, o) {
return underscore.extend(memo, o);
}, {});
,并得到了预期的结果:
{ x: 1, y: 2 }
为什么有什么区别? reduce
期望作为第二个参数的函数获得两个参数并返回一个,并且在两种情况下都得到它。那么我错过了什么?
明白了。所以基本上我做了'underscore.extend({},{x:1},'a',obj);' – GilZ
@Gil:Yup,第一遍。 :-) –
当用'for ... in ...'循环(这是'_.extend'工作方式)循环时,字符串'“a”'只发出一个键 - 唯一字符的索引在字符串('0')中。例如,一个较长的字符串可以扩展为''abc'' - >'{'0':'a','1':'b','2':'c'}'。 –