LODASH PARTIAL RIGHT PADART START MAP结果不佳

Lodash partialRight padStart map Gives Bad Result(LODASH PARTIAL RIGHT PADART START MAP结果不佳)
本文介绍了LODASH PARTIAL RIGHT PADART START MAP结果不佳的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在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结果不佳的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

相关文档推荐

Update another component when Formik form changes(当Formik表单更改时更新另一个组件)
Formik validation isSubmitting / isValidating not getting set to true(Formik验证正在提交/isValiating未设置为True)
React Validation Max Range Using Formik(使用Formik的Reaction验证最大范围)
Validation using Yup to check string or number length(使用YUP检查字符串或数字长度的验证)
Updating initialValues prop on Formik Form does not update input value(更新Formik表单上的初始值属性不会更新输入值)
password validation with yup and formik(使用YUP和Formick进行密码验证)