diff --git a/findLastIndex.js b/findLastIndex.js index 98a358e02..f38fc082d 100644 --- a/findLastIndex.js +++ b/findLastIndex.js @@ -1,4 +1,5 @@ import baseFindIndex from './.internal/baseFindIndex.js' +import toInteger from './toInteger.js' /** * This method is like `findIndex` except that it iterates over elements @@ -29,9 +30,10 @@ function findLastIndex(array, predicate, fromIndex) { } let index = length - 1 if (fromIndex !== undefined) { + index = toInteger(fromIndex) index = fromIndex < 0 - ? Math.max(length + fromIndex, 0) - : Math.min(fromIndex, length - 1) + ? Math.max(length + index, 0) + : Math.min(index, length - 1) } return baseFindIndex(array, predicate, index, true) } diff --git a/lastIndexOf.js b/lastIndexOf.js index e5894f4fb..23f3a76e7 100644 --- a/lastIndexOf.js +++ b/lastIndexOf.js @@ -1,6 +1,7 @@ import baseFindIndex from './.internal/baseFindIndex.js' import baseIsNaN from './.internal/baseIsNaN.js' import strictLastIndexOf from './.internal/strictLastIndexOf.js' +import toInteger from './toInteger.js' /** * This method is like `indexOf` except that it iterates over elements of @@ -28,6 +29,7 @@ function lastIndexOf(array, value, fromIndex) { } let index = length if (fromIndex !== undefined) { + index = toInteger(fromIndex) index = index < 0 ? Math.max(length + index, 0) : Math.min(index, length - 1) } return value === value diff --git a/test/findLast.js b/test/findLast.test.js similarity index 100% rename from test/findLast.js rename to test/findLast.test.js diff --git a/test/findLastIndex-and-lastIndexOf.js b/test/findLastIndex-and-lastIndexOf.test.js similarity index 90% rename from test/findLastIndex-and-lastIndexOf.js rename to test/findLastIndex-and-lastIndexOf.test.js index 44744bb99..e28803e39 100644 --- a/test/findLastIndex-and-lastIndexOf.js +++ b/test/findLastIndex-and-lastIndexOf.test.js @@ -1,11 +1,18 @@ import assert from 'assert'; import lodashStable from 'lodash'; -import { _, identity, stubZero, falsey } from './utils.js'; +import { identity, stubZero, falsey } from './utils.js'; +import findLastIndex from '../findLastIndex.js'; +import lastIndexOf from '../lastIndexOf.js'; + +const methods = { + findLastIndex, + lastIndexOf +}; describe('findLastIndex and lastIndexOf', function() { lodashStable.each(['findLastIndex', 'lastIndexOf'], function(methodName) { var array = [1, 2, 3, 1, 2, 3], - func = _[methodName], + func = methods[methodName], resolve = methodName == 'findLastIndex' ? lodashStable.curry(lodashStable.eq) : identity; it('`_.' + methodName + '` should return the index of the last matched value', function() {