| 'use strict'; |
| var bind = require('../internals/function-bind-context'); |
| var IndexedObject = require('../internals/indexed-object'); |
| var toObject = require('../internals/to-object'); |
| var lengthOfArrayLike = require('../internals/length-of-array-like'); |
|
|
| |
| var createMethod = function (TYPE) { |
| var IS_FIND_LAST_INDEX = TYPE === 1; |
| return function ($this, callbackfn, that) { |
| var O = toObject($this); |
| var self = IndexedObject(O); |
| var index = lengthOfArrayLike(self); |
| var boundFunction = bind(callbackfn, that); |
| var value, result; |
| while (index-- > 0) { |
| value = self[index]; |
| result = boundFunction(value, index, O); |
| if (result) switch (TYPE) { |
| case 0: return value; |
| case 1: return index; |
| } |
| } |
| return IS_FIND_LAST_INDEX ? -1 : undefined; |
| }; |
| }; |
|
|
| module.exports = { |
| |
| |
| findLast: createMethod(0), |
| |
| |
| findLastIndex: createMethod(1) |
| }; |
|
|