return default index when not found

This commit is contained in:
fatedeity
2019-08-11 16:20:26 +08:00
parent 1cee67393c
commit 80164c8a52
3 changed files with 10 additions and 5 deletions

View File

@ -4,15 +4,17 @@ Returns the index of the last element for which the provided function returns a
Use `Array.prototype.map()` to map each element to an array with its index and value. Use `Array.prototype.map()` to map each element to an array with its index and value.
Use `Array.prototype.filter()` to remove elements for which `fn` returns falsy values, `Array.prototype.pop()` to get the last one. Use `Array.prototype.filter()` to remove elements for which `fn` returns falsy values, `Array.prototype.pop()` to get the last one.
`-1` is the default value when not found.
```js ```js
const findLastIndex = (arr, fn) => const findLastIndex = (arr, fn) =>
arr (arr
.map((val, i) => [i, val]) .map((val, i) => [i, val])
.filter(([i, val]) => fn(val, i, arr)) .filter(([i, val]) => fn(val, i, arr))
.pop()[0]; .pop() || [-1])[0];
``` ```
```js ```js
findLastIndex([1, 2, 3, 4], n => n % 2 === 1); // 2 (index of the value 3) findLastIndex([1, 2, 3, 4], n => n % 2 === 1); // 2 (index of the value 3)
findLastIndex([1, 2, 3, 4], n => n === 5); // -1 (default value when not found)
``` ```

View File

@ -364,10 +364,10 @@ const filterNonUniqueBy = (arr, fn) =>
const findKey = (obj, fn) => Object.keys(obj).find(key => fn(obj[key], key, obj)); const findKey = (obj, fn) => Object.keys(obj).find(key => fn(obj[key], key, obj));
const findLast = (arr, fn) => arr.filter(fn).pop(); const findLast = (arr, fn) => arr.filter(fn).pop();
const findLastIndex = (arr, fn) => const findLastIndex = (arr, fn) =>
arr (arr
.map((val, i) => [i, val]) .map((val, i) => [i, val])
.filter(([i, val]) => fn(val, i, arr)) .filter(([i, val]) => fn(val, i, arr))
.pop()[0]; .pop() || [-1])[0];
const findLastKey = (obj, fn) => const findLastKey = (obj, fn) =>
Object.keys(obj) Object.keys(obj)
.reverse() .reverse()

View File

@ -6,3 +6,6 @@ test('findLastIndex is a Function', () => {
test('Finds last index for which the given function returns true', () => { test('Finds last index for which the given function returns true', () => {
expect(findLastIndex([1, 2, 3, 4], n => n % 2 === 1)).toBe(2); expect(findLastIndex([1, 2, 3, 4], n => n % 2 === 1)).toBe(2);
}); });
test('Return default index when not found', () => {
expect(findLastIndex([1, 2, 3, 4], n => n === 5)).toBe(-1);
});