Ensure fp key methods provide the key argument to their iteratees. [closes #1842]

This commit is contained in:
John-David Dalton
2016-01-21 23:15:52 -06:00
parent 68d0238044
commit b13b17e801
3 changed files with 55 additions and 27 deletions

View File

@@ -40,21 +40,16 @@ function baseConvert(util, name, func) {
keys = _.keys,
rearg = _.rearg;
var baseAry = function(func, n) {
return function() {
var args = arguments,
length = Math.min(args.length, n);
var baseArity = function(func, n) {
return n == 2
? function(a, b) { return func.apply(undefined, arguments); }
: function(a) { return func.apply(undefined, arguments); };
};
switch (length) {
case 1: return func(args[0]);
case 2: return func(args[0], args[1]);
}
args = Array(length);
while (length--) {
args[length] = arguments[length];
}
return func.apply(undefined, args);
};
var baseAry = function(func, n) {
return n == 2
? function(a, b) { return func(a, b); }
: function(a) { return func(a); };
};
var cloneArray = function(array) {
@@ -83,6 +78,13 @@ function baseConvert(util, name, func) {
});
};
var iterateeRearg = function(func, indexes) {
return overArg(func, function(func) {
var n = indexes.length;
return baseArity(rearg(baseAry(func, n), indexes), n);
});
};
var overArg = function(func, iteratee, retArg) {
return function() {
var length = arguments.length,
@@ -172,6 +174,10 @@ function baseConvert(util, name, func) {
if (n) {
result = iterateeAry(result, n);
}
var indexes = mapping.iterateeRearg[name];
if (indexes) {
result = iterateeRearg(result, indexes);
}
if (cap > 1) {
result = curry(result, cap);
}