Kri*_*son 51 javascript lodash
除了声明"转换是一种更有效的替代方法"之外,我找不到有关差异的文档.lodash中的transform和reduce之间有什么区别(除了慢25%)?
meg*_*wac 85
在我拉入实用程序之前,我想深入研究源代码.对于lo-dash而言,这可能很困难,因为所有实用程序中都有大量抽象的内部功能.
所以明显的区别是:
_.transform则会猜测你是否想要一个数组或对象,而reduce会使累加器成为集合的初始项. 示例,数组或对象映射transform:
_.transform([1, 2, 3], function(memo, val, idx) {
memo[idx] = val + 5;
});
// => [6, 7, 8]
Run Code Online (Sandbox Code Playgroud)
减少(注意,您必须知道输入类型!)
_.reduce([1, 2, 3], function(memo, val, idx) {
memo[idx] = val + 5;
return memo;
}, []);
Run Code Online (Sandbox Code Playgroud)
因此,使用reduce时,下面将计算数组的总和,这对于变换是不可能的,因为a它将是一个数组.
var sum = _.reduce([1, 2, 3, 4], function(a, b) {
return a + b;
});
Run Code Online (Sandbox Code Playgroud)
transform并且累加器不能改变值(即它将始终是相同的数组).我会说这是函数的最大优点,因为我经常忘记使用reduce返回累加器.例如,如果您想使用reduce将数组转换为值的字典,则可以编写如下代码:
_.reduce([1, 2, 3, 4, 5], function(memo, idx) {
memo[idx] = true;
return memo;
}, {});
Run Code Online (Sandbox Code Playgroud)
而对于变换,我们可以很好地编写这个,而不需要像reduce一样返回累加器
_.transform([1, 2, 3, 4, 5], function(memo, idx) {
memo[idx] = true;
}, {});
Run Code Online (Sandbox Code Playgroud)
总的来说,我认为reduce是一种更灵活的方法,因为你可以更好地控制累加器,但是转换可以用于以更简单的方式为某些情况编写等效代码.
| 归档时间: |
|
| 查看次数: |
26056 次 |
| 最近记录: |