UNPKG

foop

Version:

interfaces that describe their intentions.

54 lines (50 loc) 4.96 kB
var ObjectKeys = require('../util/keys') var lengthMinusOne = require('../util/lengthMinusOne') var isArray = require('../is/array') var isObj = require('../is/objNotNull') var isString = require('../is/stringPrimitive') /** * @desc get last index in a list * @since 5.0.0-beta.2 * @memberOf fp * * @name lastIndex * @alias findLastIndex * * @param {Array | Object | string | *} x item to find the last index of * @return {number|string|*} last index, usually number/string * * @tests fp/last * * @TODO could have support for map... * @NOTE works for strings too eh * @extends deps/util/keysObjOrArray * * {@link https://github.com/jashkenas/underscore/blob/master/underscore.js#L667 underscore-last-index} * {@link https://github.com/lodash/lodash/tree/npm-packages/lodash.findlastindex lodash-find-last-index} * {@link https://github.com/ramda/ramda/tree/v0.24.1/src/findLastIndex.js ramda-find-last-index} * @see {@link ramda-find-last-index} * @see {@link lodash-find-last-index} * @see {@link underscore-last-index} * @see deps/fp/last * * @example * * lastIndex([0, 'one']) //=> 1 * lastIndex({one: 1, two: 2}) //=> 'two' * */ function lastIndex(x) { if (isString(x) || isArray(x)) { return lengthMinusOne(x) } else if (isObj(x)) { return ObjectKeys(x).pop() } else { return -1 } // @TODO if (isString(x)) return x.lastIndexOf() // else if (isObj(x)) return toNumber(lengthMinusOne(keys(x))) // else if (isObj(x)) return lastIndex(ObjectKeys(x)) // const xKeys = isArray(x) ? x : keys(x) // return xKeys[lengthMinusOne(xKeys)] // const last = xKeys[xKeys.length - 1] // return last } module.exports = lastIndex //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGFzdEluZGV4LmpzIiwic291cmNlcyI6WyJsYXN0SW5kZXguanMiXSwic291cmNlc0NvbnRlbnQiOlsiY29uc3QgT2JqZWN0S2V5cyA9IHJlcXVpcmUoJy4uL3V0aWwva2V5cycpXG5jb25zdCBsZW5ndGhNaW51c09uZSA9IHJlcXVpcmUoJy4uL3V0aWwvbGVuZ3RoTWludXNPbmUnKVxuY29uc3QgaXNBcnJheSA9IHJlcXVpcmUoJy4uL2lzL2FycmF5JylcbmNvbnN0IGlzT2JqID0gcmVxdWlyZSgnLi4vaXMvb2JqTm90TnVsbCcpXG5jb25zdCBpc1N0cmluZyA9IHJlcXVpcmUoJy4uL2lzL3N0cmluZ1ByaW1pdGl2ZScpXG5cbi8qKlxuICogQGRlc2MgZ2V0IGxhc3QgaW5kZXggaW4gYSBsaXN0XG4gKiBAc2luY2UgNS4wLjAtYmV0YS4yXG4gKiBAbWVtYmVyT2YgZnBcbiAqXG4gKiBAbmFtZSBsYXN0SW5kZXhcbiAqIEBhbGlhcyBmaW5kTGFzdEluZGV4XG4gKlxuICogQHBhcmFtICB7QXJyYXkgfCBPYmplY3QgfCBzdHJpbmcgfCAqfSB4IGl0ZW0gdG8gZmluZCB0aGUgbGFzdCBpbmRleCBvZlxuICogQHJldHVybiB7bnVtYmVyfHN0cmluZ3wqfSBsYXN0IGluZGV4LCB1c3VhbGx5IG51bWJlci9zdHJpbmdcbiAqXG4gKiBAdGVzdHMgZnAvbGFzdFxuICpcbiAqIEBUT0RPIGNvdWxkIGhhdmUgc3VwcG9ydCBmb3IgbWFwLi4uXG4gKiBATk9URSB3b3JrcyBmb3Igc3RyaW5ncyB0b28gZWhcbiAqIEBleHRlbmRzIGRlcHMvdXRpbC9rZXlzT2JqT3JBcnJheVxuICpcbiAqIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vamFzaGtlbmFzL3VuZGVyc2NvcmUvYmxvYi9tYXN0ZXIvdW5kZXJzY29yZS5qcyNMNjY3IHVuZGVyc2NvcmUtbGFzdC1pbmRleH1cbiAqIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vbG9kYXNoL2xvZGFzaC90cmVlL25wbS1wYWNrYWdlcy9sb2Rhc2guZmluZGxhc3RpbmRleCBsb2Rhc2gtZmluZC1sYXN0LWluZGV4fVxuICoge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9yYW1kYS9yYW1kYS90cmVlL3YwLjI0LjEvc3JjL2ZpbmRMYXN0SW5kZXguanMgcmFtZGEtZmluZC1sYXN0LWluZGV4fVxuICogQHNlZSB7QGxpbmsgcmFtZGEtZmluZC1sYXN0LWluZGV4fVxuICogQHNlZSB7QGxpbmsgbG9kYXNoLWZpbmQtbGFzdC1pbmRleH1cbiAqIEBzZWUge0BsaW5rIHVuZGVyc2NvcmUtbGFzdC1pbmRleH1cbiAqIEBzZWUgZGVwcy9mcC9sYXN0XG4gKlxuICogQGV4YW1wbGVcbiAqXG4gKiAgIGxhc3RJbmRleChbMCwgJ29uZSddKSAgICAgICAvLz0+IDFcbiAqICAgbGFzdEluZGV4KHtvbmU6IDEsIHR3bzogMn0pIC8vPT4gJ3R3bydcbiAqXG4gKi9cbmZ1bmN0aW9uIGxhc3RJbmRleCh4KSB7XG4gIGlmIChpc1N0cmluZyh4KSB8fCBpc0FycmF5KHgpKSByZXR1cm4gbGVuZ3RoTWludXNPbmUoeClcbiAgZWxzZSBpZiAoaXNPYmooeCkpIHJldHVybiBPYmplY3RLZXlzKHgpLnBvcCgpXG4gIGVsc2UgcmV0dXJuIC0xXG5cbiAgLy8gQFRPRE8gaWYgKGlzU3RyaW5nKHgpKSByZXR1cm4geC5sYXN0SW5kZXhPZigpXG4gIC8vIGVsc2UgaWYgKGlzT2JqKHgpKSByZXR1cm4gdG9OdW1iZXIobGVuZ3RoTWludXNPbmUoa2V5cyh4KSkpXG4gIC8vIGVsc2UgaWYgKGlzT2JqKHgpKSByZXR1cm4gbGFzdEluZGV4KE9iamVjdEtleXMoeCkpXG4gIC8vIGNvbnN0IHhLZXlzID0gaXNBcnJheSh4KSA/IHggOiBrZXlzKHgpXG4gIC8vIHJldHVybiB4S2V5c1tsZW5ndGhNaW51c09uZSh4S2V5cyldXG4gIC8vIGNvbnN0IGxhc3QgPSB4S2V5c1t4S2V5cy5sZW5ndGggLSAxXVxuICAvLyByZXR1cm4gbGFzdFxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGxhc3RJbmRleFxuIl0sIm5hbWVzIjpbImNvbnN0Il0sIm1hcHBpbmdzIjoiQUFBQUEsR0FBSyxDQUFDLFVBQVUsR0FBRyxPQUFPLENBQUMsY0FBYyxDQUFDO0FBQzFDQSxHQUFLLENBQUMsY0FBYyxHQUFHLE9BQU8sQ0FBQyx3QkFBd0IsQ0FBQztBQUN4REEsR0FBSyxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUMsYUFBYSxDQUFDO0FBQ3RDQSxHQUFLLENBQUMsS0FBSyxHQUFHLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQztBQUN6Q0EsR0FBSyxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUMsdUJBQXVCLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQWlDakQsU0FBUyxTQUFTLENBQUMsQ0FBQyxFQUFFO0VBQ3BCLElBQUksUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFBLE9BQU8sY0FBYyxDQUFDLENBQUMsQ0FBQyxFQUFBO09BQ2xELElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUEsT0FBTyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUE7T0FDeEMsRUFBQSxPQUFPLENBQUMsQ0FBQyxFQUFBOzs7Ozs7Ozs7Q0FTZjs7QUFFRCxNQUFNLENBQUMsT0FBTyxHQUFHLFNBQVM7In0=