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以更简单的方式为某些情况编写等效代码。