lodash转换和减less有什么区别
除了指出“变革是一个更有力的减lessselect”之外,我还没有find差异的文件。 lodash中的转换和减less有什么区别( 慢了25% )?
我喜欢在使用实用程序之前深入了解源代码。 对于破折号来说,这可能是困难的,因为在所有的公用设施中都有大量的抽象的内部function。
- 转换源
- 减less来源
所以明显的区别是:
- 如果你不指定累加器 (如果你习惯用下划线通常称为备忘录 ),
_.transform
会猜测你是否想要一个数组或对象,而reduce会使得累加器成为集合的初始项。
例如,通过transform
数组或对象映射:
_.transform([1, 2, 3], function(memo, val, idx) { memo[idx] = val + 5; }); // => [6, 7, 8]
减less(注意,你必须知道inputtypes!)
_.reduce([1, 2, 3], function(memo, val, idx) { memo[idx] = val + 5; return memo; }, []);
所以虽然减less下面将计算一个数组的总和,这将不可能与变换作为将是一个数组。
var sum = _.reduce([1, 2, 3, 4], function(a, b) { return a + b; });
- 另一个很大的区别是你不必使用
transform
返回累加器,累加器也不能改变数值(也就是说它总是一样的数组)。 我会说这是函数的最大优点,因为我经常忘记使用reduce来返回累加器。
例如,如果你想将数组转换为数值字典,可以使用下面的代码:
_.reduce([1, 2, 3, 4, 5], function(memo, idx) { memo[idx] = true; return memo; }, {});
而对于变换,我们可以很好地写这个,而不需要像reduce那样返回累加器
_.transform([1, 2, 3, 4, 5], function(memo, idx) { memo[idx] = true; }, {});
- 另一个区别是我们可以通过返回false来退出变换迭代。
总的来说,我认为reduce是一个更加灵活的方法,因为您可以更好地控制累加器,但是可以使用transform以更简单的方式为某些情况编写等效代码。