Lodash partialRight padStart映射产生错误结果
Lodash partialRight padStart map Gives Bad Result
使用lodash(v4.6.1)时遇到了一个奇怪的情况,我将_.padStart
的_.partialRight
函数传递到_.map
回调中,结果很糟糕。
Repro:
_.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"]
在深入研究了这样做的lodash代码后,我们来到这里:
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
添加的参数被附加在该函数上调用的任何和所有参数之后。
现在我们进入问题部分。这是lodash的错误/限制吗?或者有更好的方法吗?
经过一些研究,为了实现这一点,在不将_.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的能力和灵活性让我惊叹不已。
相关文章:
- 如何知道javascript for语句中的所有结果是否都是错误的
- JScript 错误: 无法分配给函数结果
- json-api和错误结果:无法读取属性'长度'的未定义
- 显示错误结果的Javascript
- javascript使用正则表达式得到错误的结果
- 在页面对象文件中验证sendKeys结果会导致未定义的错误(Protractor)
- YouTube API v3哈希标签搜索错误结果
- jQuery.Validate - 如何将错误结果放在不同的地方
- 检查JavaScript中的日期时间是否相等时出现错误结果
- 转换日期时出现错误结果
- Lodash partialRight padStart映射产生错误结果
- 在javascript中乘法的错误结果
- 用于显示错误结果的JavaScript嵌套
- 什么'这是处理promise对象中错误结果的正确方法
- 显示错误结果的typeOf
- Javascript getDate()和getMonth()返回错误结果
- LokiJS:简单的查找查询返回错误结果
- Bootstrap-datepicker getDate错误结果
- 比较select.val()和span.text()后产生错误结果
- 坐标转换javascript库Pro4js错误结果