mirror of
https://github.com/whoisclebs/lodash.git
synced 2026-02-07 01:57:50 +00:00
Ensure length hit of for lazy eval is checked on initial lazy call. [closes #997]
This commit is contained in:
@@ -11674,12 +11674,13 @@
|
|||||||
chainAll = this.__chain__,
|
chainAll = this.__chain__,
|
||||||
value = this.__wrapped__,
|
value = this.__wrapped__,
|
||||||
isHybrid = !!this.__actions__.length,
|
isHybrid = !!this.__actions__.length,
|
||||||
isLazy = value instanceof LazyWrapper;
|
isLazy = value instanceof LazyWrapper,
|
||||||
|
iteratee = args[0],
|
||||||
|
useLazy = isLazy || isArray(value);
|
||||||
|
|
||||||
if (isLazy && checkIteratee) {
|
if (useLazy && checkIteratee && typeof iteratee == 'function' && iteratee.length != 1) {
|
||||||
// avoid lazy use if the iteratee has a `length` other than `1`
|
// avoid lazy use if the iteratee has a `length` other than `1`
|
||||||
var iteratee = args[0];
|
isLazy = useLazy = false;
|
||||||
isLazy = !(typeof iteratee == 'function' && iteratee.length != 1);
|
|
||||||
}
|
}
|
||||||
var onlyLazy = isLazy && !isHybrid;
|
var onlyLazy = isLazy && !isHybrid;
|
||||||
if (retUnwrapped && !chainAll) {
|
if (retUnwrapped && !chainAll) {
|
||||||
@@ -11692,7 +11693,7 @@
|
|||||||
push.apply(otherArgs, args);
|
push.apply(otherArgs, args);
|
||||||
return lodashFunc.apply(lodash, otherArgs);
|
return lodashFunc.apply(lodash, otherArgs);
|
||||||
};
|
};
|
||||||
if (isLazy || isArray(value)) {
|
if (useLazy) {
|
||||||
var wrapper = onlyLazy ? value : new LazyWrapper(this),
|
var wrapper = onlyLazy ? value : new LazyWrapper(this),
|
||||||
result = func.apply(wrapper, args);
|
result = func.apply(wrapper, args);
|
||||||
|
|
||||||
|
|||||||
62
test/test.js
62
test/test.js
@@ -3986,11 +3986,17 @@
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
test('should provide the correct `predicate` arguments in a lazy chain sequence', 4, function() {
|
test('should provide the correct `predicate` arguments in a lazy chain sequence', 5, function() {
|
||||||
if (!isNpm) {
|
if (!isNpm) {
|
||||||
var args,
|
var args,
|
||||||
expected = [16, 3, [1, 4, 9 ,16]];
|
expected = [16, 3, [1, 4, 9 ,16]];
|
||||||
|
|
||||||
|
_(array).dropRightWhile(function(value, index, array) {
|
||||||
|
args = slice.call(arguments);
|
||||||
|
}).value();
|
||||||
|
|
||||||
|
deepEqual(args, [4, 3, array]);
|
||||||
|
|
||||||
_(array).map(square).dropRightWhile(function(value, index, array) {
|
_(array).map(square).dropRightWhile(function(value, index, array) {
|
||||||
args = slice.call(arguments);
|
args = slice.call(arguments);
|
||||||
}).value();
|
}).value();
|
||||||
@@ -4016,7 +4022,7 @@
|
|||||||
deepEqual(args, expected);
|
deepEqual(args, expected);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
skipTest(4);
|
skipTest(5);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}());
|
}());
|
||||||
@@ -4102,11 +4108,17 @@
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
test('should provide the correct `predicate` arguments in a lazy chain sequence', 4, function() {
|
test('should provide the correct `predicate` arguments in a lazy chain sequence', 5, function() {
|
||||||
if (!isNpm) {
|
if (!isNpm) {
|
||||||
var args,
|
var args,
|
||||||
expected = [1, 0, [1, 4, 9, 16]];
|
expected = [1, 0, [1, 4, 9, 16]];
|
||||||
|
|
||||||
|
_(array).dropWhile(function(value, index, array) {
|
||||||
|
args = slice.call(arguments);
|
||||||
|
}).value();
|
||||||
|
|
||||||
|
deepEqual(args, [1, 0, array]);
|
||||||
|
|
||||||
_(array).map(square).dropWhile(function(value, index, array) {
|
_(array).map(square).dropWhile(function(value, index, array) {
|
||||||
args = slice.call(arguments);
|
args = slice.call(arguments);
|
||||||
}).value();
|
}).value();
|
||||||
@@ -4132,7 +4144,7 @@
|
|||||||
deepEqual(args, expected);
|
deepEqual(args, expected);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
skipTest(4);
|
skipTest(5);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}());
|
}());
|
||||||
@@ -4936,11 +4948,17 @@
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
test('should provide the correct `predicate` arguments in a lazy chain sequence', 4, function() {
|
test('should provide the correct `predicate` arguments in a lazy chain sequence', 5, function() {
|
||||||
if (!isNpm) {
|
if (!isNpm) {
|
||||||
var args,
|
var args,
|
||||||
expected = [16, 3, [1, 4, 9 , 16]];
|
expected = [16, 3, [1, 4, 9 , 16]];
|
||||||
|
|
||||||
|
_(array).takeRightWhile(function(value, index, array) {
|
||||||
|
args = slice.call(arguments)
|
||||||
|
}).value();
|
||||||
|
|
||||||
|
deepEqual(args, [4, 3, array]);
|
||||||
|
|
||||||
_(array).map(square).takeRightWhile(function(value, index, array) {
|
_(array).map(square).takeRightWhile(function(value, index, array) {
|
||||||
args = slice.call(arguments)
|
args = slice.call(arguments)
|
||||||
}).value();
|
}).value();
|
||||||
@@ -4966,7 +4984,7 @@
|
|||||||
deepEqual(args, expected);
|
deepEqual(args, expected);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
skipTest(4);
|
skipTest(5);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}());
|
}());
|
||||||
@@ -5051,11 +5069,17 @@
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
test('should provide the correct `predicate` arguments in a lazy chain sequence', 4, function() {
|
test('should provide the correct `predicate` arguments in a lazy chain sequence', 5, function() {
|
||||||
if (!isNpm) {
|
if (!isNpm) {
|
||||||
var args,
|
var args,
|
||||||
expected = [1, 0, [1, 4, 9, 16]];
|
expected = [1, 0, [1, 4, 9, 16]];
|
||||||
|
|
||||||
|
_(array).takeWhile(function(value, index, array) {
|
||||||
|
args = slice.call(arguments);
|
||||||
|
}).value();
|
||||||
|
|
||||||
|
deepEqual(args, [1, 0, array]);
|
||||||
|
|
||||||
_(array).map(square).takeWhile(function(value, index, array) {
|
_(array).map(square).takeWhile(function(value, index, array) {
|
||||||
args = slice.call(arguments);
|
args = slice.call(arguments);
|
||||||
}).value();
|
}).value();
|
||||||
@@ -5081,7 +5105,7 @@
|
|||||||
deepEqual(args, expected);
|
deepEqual(args, expected);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
skipTest(4);
|
skipTest(5);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}());
|
}());
|
||||||
@@ -9223,11 +9247,18 @@
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
test('should provide the correct `predicate` arguments in a lazy chain sequence', 4, function() {
|
test('should provide the correct `predicate` arguments in a lazy chain sequence', 5, function() {
|
||||||
if (!isNpm) {
|
if (!isNpm) {
|
||||||
var args,
|
var args,
|
||||||
expected = [1, 0, [1, 4, 9]];
|
expected = [1, 0, [1, 4, 9]];
|
||||||
|
|
||||||
|
_(array).map(function(value, index, array) {
|
||||||
|
args || (args = slice.call(arguments));
|
||||||
|
}).value();
|
||||||
|
|
||||||
|
deepEqual(args, [1, 0, array]);
|
||||||
|
|
||||||
|
args = null;
|
||||||
_(array).map(square).map(function(value, index, array) {
|
_(array).map(square).map(function(value, index, array) {
|
||||||
args || (args = slice.call(arguments));
|
args || (args = slice.call(arguments));
|
||||||
}).value();
|
}).value();
|
||||||
@@ -9256,7 +9287,7 @@
|
|||||||
deepEqual(args, expected);
|
deepEqual(args, expected);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
skipTest(4);
|
skipTest(5);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -12210,11 +12241,18 @@
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
test('`_.' + methodName + '` should provide the correct `predicate` arguments in a lazy chain sequence', 4, function() {
|
test('`_.' + methodName + '` should provide the correct `predicate` arguments in a lazy chain sequence', 5, function() {
|
||||||
if (!isNpm) {
|
if (!isNpm) {
|
||||||
var args,
|
var args,
|
||||||
expected = [1, 0, [1, 4, 9, 16]];
|
expected = [1, 0, [1, 4, 9, 16]];
|
||||||
|
|
||||||
|
_(array)[methodName](function(value, index, array) {
|
||||||
|
args || (args = slice.call(arguments));
|
||||||
|
}).value();
|
||||||
|
|
||||||
|
deepEqual(args, [1, 0, array]);
|
||||||
|
|
||||||
|
args = null;
|
||||||
_(array).map(square)[methodName](function(value, index, array) {
|
_(array).map(square)[methodName](function(value, index, array) {
|
||||||
args || (args = slice.call(arguments));
|
args || (args = slice.call(arguments));
|
||||||
}).value();
|
}).value();
|
||||||
@@ -12243,7 +12281,7 @@
|
|||||||
deepEqual(args, expected);
|
deepEqual(args, expected);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
skipTest(4);
|
skipTest(5);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
Reference in New Issue
Block a user