foop
Version:
interfaces that describe their intentions.
80 lines (75 loc) • 5.66 kB
JavaScript
var curry = require('../fp/curry')
var isString = require('../is/string')
/**
* Gets the element at index `n` of `array`. If `n` is negative, the nth
* element from the end is returned.
*
* @memberOf fp
* @since 5.0.0-beta.1
*
* @param {Array|Object|String} array The array|obj|string to query.
* @param {number} [n=0] The index of the element to return.
* @returns {*} Returns the nth element of `array`.
*
* @tests fp/arity
*
* @fork 4.11.0
* @category Array
*
* @name nth
* @alias at
* @alias atIndex
* @alias atPosition
*
* {@link http://documentcloud.github.io/underscore-contrib/#nth underscore-contrib-nth}
* {@link https://github.com/lodash/lodash/blob/master/.internal/baseAt.js lodash-base-at}
* {@link https://github.com/lodash/lodash/blob/master/at.js lodash-at}
* {@link https://github.com/ramda/ramda/blob/v0.24.1/src/nth.js ramda-nth}
*
* @see {@link ramda-nth}
* @see {@link lodash-base-at}
* @see {@link lodash-at}
* @see {@link underscore-contrib-nth}
*
* @example
*
* const array = ['a', 'b', 'c', 'd']
*
* nth(array, 1)
* //=> 'b'
*
* nth(array, -2)
* //=> 'c'
*
*/
function nth(list, offset) {
// isNill(array) return
// @TODO from 0
var index = offset < 0 ? list.length + offset : offset
// return list[index]
return isString(list) ? list.charAt(index) : list[index]
}
module.exports = curry(2, nth)
/**
* @ignore
* The base implementation of `at` without support for individual paths.
*
* @private
* @param {Array|Object} object The object to iterate over.
* @param {string[]} paths The property paths to pick.
* @returns {Array} Returns the picked elements.
*/
// const isIndex = require('./isValidIndex')
// const isNill = require('../is/nill')
// function baseAt(object, paths) {
// let index = -1
// const length = paths.length
// const result = new Array(length)
// const skip = object == null
//
// while (++index < length) {
// result[index] = skip ? undefined : get(object, paths[index])
// }
// return result
// }
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnRoLmpzIiwic291cmNlcyI6WyJudGguanMiXSwic291cmNlc0NvbnRlbnQiOlsiY29uc3QgY3VycnkgPSByZXF1aXJlKCcuLi9mcC9jdXJyeScpXG5jb25zdCBpc1N0cmluZyA9IHJlcXVpcmUoJy4uL2lzL3N0cmluZycpXG5cbi8qKlxuICogR2V0cyB0aGUgZWxlbWVudCBhdCBpbmRleCBgbmAgb2YgYGFycmF5YC4gSWYgYG5gIGlzIG5lZ2F0aXZlLCB0aGUgbnRoXG4gKiBlbGVtZW50IGZyb20gdGhlIGVuZCBpcyByZXR1cm5lZC5cbiAqXG4gKiBAbWVtYmVyT2YgZnBcbiAqIEBzaW5jZSA1LjAuMC1iZXRhLjFcbiAqXG4gKiBAcGFyYW0ge0FycmF5fE9iamVjdHxTdHJpbmd9IGFycmF5IFRoZSBhcnJheXxvYmp8c3RyaW5nIHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtudW1iZXJ9IFtuPTBdIFRoZSBpbmRleCBvZiB0aGUgZWxlbWVudCB0byByZXR1cm4uXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgbnRoIGVsZW1lbnQgb2YgYGFycmF5YC5cbiAqXG4gKiBAdGVzdHMgZnAvYXJpdHlcbiAqXG4gKiBAZm9yayA0LjExLjBcbiAqIEBjYXRlZ29yeSBBcnJheVxuICpcbiAqIEBuYW1lIG50aFxuICogQGFsaWFzIGF0XG4gKiBAYWxpYXMgYXRJbmRleFxuICogQGFsaWFzIGF0UG9zaXRpb25cbiAqXG4gKiB7QGxpbmsgaHR0cDovL2RvY3VtZW50Y2xvdWQuZ2l0aHViLmlvL3VuZGVyc2NvcmUtY29udHJpYi8jbnRoIHVuZGVyc2NvcmUtY29udHJpYi1udGh9XG4gKiB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2xvZGFzaC9sb2Rhc2gvYmxvYi9tYXN0ZXIvLmludGVybmFsL2Jhc2VBdC5qcyBsb2Rhc2gtYmFzZS1hdH1cbiAqIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vbG9kYXNoL2xvZGFzaC9ibG9iL21hc3Rlci9hdC5qcyBsb2Rhc2gtYXR9XG4gKiB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3JhbWRhL3JhbWRhL2Jsb2IvdjAuMjQuMS9zcmMvbnRoLmpzIHJhbWRhLW50aH1cbiAqXG4gKiBAc2VlIHtAbGluayByYW1kYS1udGh9XG4gKiBAc2VlIHtAbGluayBsb2Rhc2gtYmFzZS1hdH1cbiAqIEBzZWUge0BsaW5rIGxvZGFzaC1hdH1cbiAqIEBzZWUge0BsaW5rIHVuZGVyc2NvcmUtY29udHJpYi1udGh9XG4gKlxuICogQGV4YW1wbGVcbiAqXG4gKiAgIGNvbnN0IGFycmF5ID0gWydhJywgJ2InLCAnYycsICdkJ11cbiAqXG4gKiAgIG50aChhcnJheSwgMSlcbiAqICAgLy89PiAnYidcbiAqXG4gKiAgIG50aChhcnJheSwgLTIpXG4gKiAgIC8vPT4gJ2MnXG4gKlxuICovXG5mdW5jdGlvbiBudGgobGlzdCwgb2Zmc2V0KSB7XG4gIC8vIGlzTmlsbChhcnJheSkgcmV0dXJuXG5cbiAgLy8gQFRPRE8gZnJvbSAwXG4gIGNvbnN0IGluZGV4ID0gb2Zmc2V0IDwgMCA/IGxpc3QubGVuZ3RoICsgb2Zmc2V0IDogb2Zmc2V0XG4gIC8vIHJldHVybiBsaXN0W2luZGV4XVxuICByZXR1cm4gaXNTdHJpbmcobGlzdCkgPyBsaXN0LmNoYXJBdChpbmRleCkgOiBsaXN0W2luZGV4XVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGN1cnJ5KDIsIG50aClcblxuLyoqXG4gKiBAaWdub3JlXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgYXRgIHdpdGhvdXQgc3VwcG9ydCBmb3IgaW5kaXZpZHVhbCBwYXRocy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheXxPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7c3RyaW5nW119IHBhdGhzIFRoZSBwcm9wZXJ0eSBwYXRocyB0byBwaWNrLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBwaWNrZWQgZWxlbWVudHMuXG4gKi9cbi8vIGNvbnN0IGlzSW5kZXggPSByZXF1aXJlKCcuL2lzVmFsaWRJbmRleCcpXG4vLyBjb25zdCBpc05pbGwgPSByZXF1aXJlKCcuLi9pcy9uaWxsJylcbi8vIGZ1bmN0aW9uIGJhc2VBdChvYmplY3QsIHBhdGhzKSB7XG4vLyAgIGxldCBpbmRleCA9IC0xXG4vLyAgIGNvbnN0IGxlbmd0aCA9IHBhdGhzLmxlbmd0aFxuLy8gICBjb25zdCByZXN1bHQgPSBuZXcgQXJyYXkobGVuZ3RoKVxuLy8gICBjb25zdCBza2lwID0gb2JqZWN0ID09IG51bGxcbi8vXG4vLyAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4vLyAgICAgcmVzdWx0W2luZGV4XSA9IHNraXAgPyB1bmRlZmluZWQgOiBnZXQob2JqZWN0LCBwYXRoc1tpbmRleF0pXG4vLyAgIH1cbi8vICAgcmV0dXJuIHJlc3VsdFxuLy8gfVxuIl0sIm5hbWVzIjpbImNvbnN0Il0sIm1hcHBpbmdzIjoiQUFBQUEsR0FBSyxDQUFDLEtBQUssR0FBRyxPQUFPLENBQUMsYUFBYSxDQUFDO0FBQ3BDQSxHQUFLLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQyxjQUFjLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBNEN4QyxTQUFTLEdBQUcsQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFOzs7O0VBSXpCQSxHQUFLLENBQUMsS0FBSyxHQUFHLE1BQU0sR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLEdBQUcsTUFBTTs7RUFFeEQsT0FBTyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0NBQ3pEOztBQUVELE1BQU0sQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzsifQ==