LODASH PARTIAL RIGHT PADART START MAP结果不佳

本教程将介绍LODASH PARTIAL RIGHT PADART START MAP结果不佳的处理方法,这篇教程是从别的地方看到的,然后加了一些国外程序员的疑问与解答,希望能对你有所帮助,好了,下面开始学习吧。

LODASH PARTIAL RIGHT PADART START MAP结果不佳 教程 第1张

问题描述

在loDash(v4.6.1)中遇到了一个奇怪的情况,我将_.padStart_.partialRight函数传入_.map回调并得到不正确的结果。

转载:

_.padStart("0", 2, "0");
// "00"
var f = _.partialRight(_.padStart, 2, "0");
f("0");
// "00"
_.map(["0"], function(s) { return f(s); });
// ["00"]
_.map(["0"], f);
// ["0"]

在深入研究执行此操作的lowash代码后,我们来到以下位置:

function arrayMap(array, iteratee) {
  var index = -1,
length = array.length,
result = Array(length);

  while (++index < length) {
 result[index] = iteratee(array[index], index, array);
  }
  return result;
}

此时iteratee是上面声明的f函数。在不进一步深入代码的情况下,我只能假设从_.partialRight添加的参数被追加到对该函数调用的任何和所有参数之后。

现在我们到了问题部分。这是Lotash的错误/限制吗?还是有更好的方法来实现此目的?

推荐答案

经过一些研究后,看起来要实现这一点,而不将_.partialRight中的结果函数包装在函数中,就是利用_.ary函数来限制它将接受的参数。因此,最终结果将如下所示:

var f = _.ary(_.partialRight(_.padStart, 2, '0'), 1);
var result = _.map(["0"], f);
// result == ["00"]

并进一步降低代码使用的丑陋程度:

_.mixin({
  "padStartTwoZeroes": _.ary(_.partialRight(_.padStart, 2, '0'), 1)
});

var numbers = [0, 5, 10];
var paddedNumbersAsStrings = _.map(numbers, _.padStartTwoZeroes);

但可能使用更优雅的命名或更通用的mapPadStart,您可以手动设置要填充的数字和字符。

无论怎么,lodash的功能和灵活性从未停止让我惊叹不已。

好了关于LODASH PARTIAL RIGHT PADART START MAP结果不佳的教程就到这里就结束了,希望趣模板源码网找到的这篇技术文章能帮助到大家,更多技术教程可以在站内搜索。