mirror of
https://github.com/whoisclebs/lodash.git
synced 2026-02-06 01:47:48 +00:00
Coerce findLastIndex and lastIndexOf fromIndex parameter to integer (#4440)
* Enable lastIndexOf, findLast and findLastIndex * Coerce findLastIndex fromIndex parameter to integer * Coerce lastIndexOf fromIndex parameter to integer
This commit is contained in:
committed by
John-David Dalton
parent
ed4b3a2ddb
commit
3ebb38d389
@@ -1,4 +1,5 @@
|
|||||||
import baseFindIndex from './.internal/baseFindIndex.js'
|
import baseFindIndex from './.internal/baseFindIndex.js'
|
||||||
|
import toInteger from './toInteger.js'
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This method is like `findIndex` except that it iterates over elements
|
* This method is like `findIndex` except that it iterates over elements
|
||||||
@@ -29,9 +30,10 @@ function findLastIndex(array, predicate, fromIndex) {
|
|||||||
}
|
}
|
||||||
let index = length - 1
|
let index = length - 1
|
||||||
if (fromIndex !== undefined) {
|
if (fromIndex !== undefined) {
|
||||||
|
index = toInteger(fromIndex)
|
||||||
index = fromIndex < 0
|
index = fromIndex < 0
|
||||||
? Math.max(length + fromIndex, 0)
|
? Math.max(length + index, 0)
|
||||||
: Math.min(fromIndex, length - 1)
|
: Math.min(index, length - 1)
|
||||||
}
|
}
|
||||||
return baseFindIndex(array, predicate, index, true)
|
return baseFindIndex(array, predicate, index, true)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
import baseFindIndex from './.internal/baseFindIndex.js'
|
import baseFindIndex from './.internal/baseFindIndex.js'
|
||||||
import baseIsNaN from './.internal/baseIsNaN.js'
|
import baseIsNaN from './.internal/baseIsNaN.js'
|
||||||
import strictLastIndexOf from './.internal/strictLastIndexOf.js'
|
import strictLastIndexOf from './.internal/strictLastIndexOf.js'
|
||||||
|
import toInteger from './toInteger.js'
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This method is like `indexOf` except that it iterates over elements of
|
* This method is like `indexOf` except that it iterates over elements of
|
||||||
@@ -28,6 +29,7 @@ function lastIndexOf(array, value, fromIndex) {
|
|||||||
}
|
}
|
||||||
let index = length
|
let index = length
|
||||||
if (fromIndex !== undefined) {
|
if (fromIndex !== undefined) {
|
||||||
|
index = toInteger(fromIndex)
|
||||||
index = index < 0 ? Math.max(length + index, 0) : Math.min(index, length - 1)
|
index = index < 0 ? Math.max(length + index, 0) : Math.min(index, length - 1)
|
||||||
}
|
}
|
||||||
return value === value
|
return value === value
|
||||||
|
|||||||
@@ -1,11 +1,18 @@
|
|||||||
import assert from 'assert';
|
import assert from 'assert';
|
||||||
import lodashStable from 'lodash';
|
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() {
|
describe('findLastIndex and lastIndexOf', function() {
|
||||||
lodashStable.each(['findLastIndex', 'lastIndexOf'], function(methodName) {
|
lodashStable.each(['findLastIndex', 'lastIndexOf'], function(methodName) {
|
||||||
var array = [1, 2, 3, 1, 2, 3],
|
var array = [1, 2, 3, 1, 2, 3],
|
||||||
func = _[methodName],
|
func = methods[methodName],
|
||||||
resolve = methodName == 'findLastIndex' ? lodashStable.curry(lodashStable.eq) : identity;
|
resolve = methodName == 'findLastIndex' ? lodashStable.curry(lodashStable.eq) : identity;
|
||||||
|
|
||||||
it('`_.' + methodName + '` should return the index of the last matched value', function() {
|
it('`_.' + methodName + '` should return the index of the last matched value', function() {
|
||||||
Reference in New Issue
Block a user