![](/img/trans.png)
[英]Why does react render differently in these two cases when using redux?
[英]Why does underscore.reduce acts differently in these two cases?
我试图展平其中有两个对象的对象,所以我做了以下工作:
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
期望的作为第二个参数的函数,该函数将获取两个参数并返回一个参数,并且在两种情况下均将其获取。 那我想念什么呢?
reduce
期望作为第二个参数的函数,该函数将获取两个参数并返回一个参数...
没有根据文档 。 下划线传递给迭代器四个而不是两个参数:
传递给迭代器四个参数:
memo
,然后是迭代的value
和index
(或key
),最后是对整个list
的引用。
因此,您最终会这样调用extend
(在第一遍):
underscore.extend({}, {x: 1}, 'a', obj)
然后第二遍
underscore.extend({/*...stuff...*/}, {y: 2}, 'b', obj)
对象具有'0': 'b'
属性的原因是字符串延伸到包含'<index>': '<char>'
类'<index>': '<char>'
属性的对象中。 这是因为_.extend
在每个参数(第一个参数除外)上运行for...in...
循环,并且通过此操作找到的键是字符索引(从0
到str.length - 1
)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.