foop
Version:
interfaces that describe their intentions.
70 lines (64 loc) • 7.16 kB
JavaScript
var isArray = require('../is/array')
var isUndefined = require('../is/undefined')
var isString = require('../is/string')
var from = require('../util/from')
var arraySlice = require('../native/arraySlice')
var curry = require('../fp/curry')
var preferExistingMethod = require('../fp/preferExistingMethod')
var stringSlice = String.prototype.slice
/**
* Returns the elements of the given list or string (or object with a `slice`
* method) from `fromIndex` (inclusive) to `toIndex` (exclusive).
* Dispatches to the `slice` method of the third argument, if present.
* @memberOf array
* @memberOf string
* @memberOf fp
* @since 5.0.0-beta.6
*
* @param {*} list array | string to slice on
* @param {Number} fromIndex The start index (inclusive).
* @param {Number} toIndex The end index (exclusive).
* @return {*}
*
* @tests fp/slice
* @curried 3
* @see fp/preferExistingMethod
*
* @func
* @fork v0.1.4
* @category List
* @sig Number -> Number -> [a] -> [a]
* @sig Number -> Number -> String -> String
*
* {@link https://github.com/lodash/lodash/blob/master/slice.js lodash-slice}
* {@link https://github.com/lodash/lodash/blob/master/.internal/castSlice.js lodash-cast-slice}
* {@link https://github.com/lodash/lodash/commit/e5e8f35c066c71a04ba584f65acc017d032c0174 lodash-commit-remove-base-slice}
* {@link https://github.com/jashkenas/underscore/blob/master/underscore.js#L1650 underscore-slice}
* {@link https://github.com/ramda/ramda/blob/master/src/slice.js}
* @see {@link ramda-slice}
* @see {@link underscore-slice}
* @see {@link lodash-commit-remove-base-slice}
* @see {@link lodash-cast-slice}
* @see {@link lodash-slice}
*
* @example
*
* slice(1, 3, ['a', 'b', 'c', 'd']); //=> ['b', 'c']
* slice(1, Infinity, ['a', 'b', 'c', 'd']); //=> ['b', 'c', 'd']
* slice(0, -1, ['a', 'b', 'c', 'd']); //=> ['a', 'b', 'c']
* slice(-3, -1, ['a', 'b', 'c', 'd']); //=> ['b', 'c']
* slice(0, 3, 'ramda'); //=> 'ram'
*
*/
function slice(list, fromIndex, toIndex) {
var to = isUndefined(toIndex) ? list.length : toIndex
if (isString(list)) { return stringSlice.call(list, fromIndex, to) }
// let array = isArray(list) ? list : from(list)
var array = list
return arraySlice.call(array, fromIndex, to)
}
// @TODO put in flipped
//
module.exports = curry(3, preferExistingMethod('slice', slice))
// module.exports = curry(3, slice)
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2xpY2UuanMiLCJzb3VyY2VzIjpbInNsaWNlLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImNvbnN0IGlzQXJyYXkgPSByZXF1aXJlKCcuLi9pcy9hcnJheScpXG5jb25zdCBpc1VuZGVmaW5lZCA9IHJlcXVpcmUoJy4uL2lzL3VuZGVmaW5lZCcpXG5jb25zdCBpc1N0cmluZyA9IHJlcXVpcmUoJy4uL2lzL3N0cmluZycpXG5jb25zdCBmcm9tID0gcmVxdWlyZSgnLi4vdXRpbC9mcm9tJylcbmNvbnN0IGFycmF5U2xpY2UgPSByZXF1aXJlKCcuLi9uYXRpdmUvYXJyYXlTbGljZScpXG5jb25zdCBjdXJyeSA9IHJlcXVpcmUoJy4uL2ZwL2N1cnJ5JylcbmNvbnN0IHByZWZlckV4aXN0aW5nTWV0aG9kID0gcmVxdWlyZSgnLi4vZnAvcHJlZmVyRXhpc3RpbmdNZXRob2QnKVxuXG5jb25zdCBzdHJpbmdTbGljZSA9IFN0cmluZy5wcm90b3R5cGUuc2xpY2VcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBlbGVtZW50cyBvZiB0aGUgZ2l2ZW4gbGlzdCBvciBzdHJpbmcgKG9yIG9iamVjdCB3aXRoIGEgYHNsaWNlYFxuICogbWV0aG9kKSBmcm9tIGBmcm9tSW5kZXhgIChpbmNsdXNpdmUpIHRvIGB0b0luZGV4YCAoZXhjbHVzaXZlKS5cbiAqIERpc3BhdGNoZXMgdG8gdGhlIGBzbGljZWAgbWV0aG9kIG9mIHRoZSB0aGlyZCBhcmd1bWVudCwgaWYgcHJlc2VudC5cbiAqIEBtZW1iZXJPZiBhcnJheVxuICogQG1lbWJlck9mIHN0cmluZ1xuICogQG1lbWJlck9mIGZwXG4gKiBAc2luY2UgNS4wLjAtYmV0YS42XG4gKlxuICogQHBhcmFtIHsqfSBsaXN0IGFycmF5IHwgc3RyaW5nIHRvIHNsaWNlIG9uXG4gKiBAcGFyYW0ge051bWJlcn0gZnJvbUluZGV4IFRoZSBzdGFydCBpbmRleCAoaW5jbHVzaXZlKS5cbiAqIEBwYXJhbSB7TnVtYmVyfSB0b0luZGV4IFRoZSBlbmQgaW5kZXggKGV4Y2x1c2l2ZSkuXG4gKiBAcmV0dXJuIHsqfVxuICpcbiAqIEB0ZXN0cyBmcC9zbGljZVxuICogQGN1cnJpZWQgM1xuICogQHNlZSBmcC9wcmVmZXJFeGlzdGluZ01ldGhvZFxuICpcbiAqIEBmdW5jXG4gKiBAZm9yayB2MC4xLjRcbiAqIEBjYXRlZ29yeSBMaXN0XG4gKiBAc2lnIE51bWJlciAtPiBOdW1iZXIgLT4gW2FdIC0+IFthXVxuICogQHNpZyBOdW1iZXIgLT4gTnVtYmVyIC0+IFN0cmluZyAtPiBTdHJpbmdcbiAqXG4gKiB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2xvZGFzaC9sb2Rhc2gvYmxvYi9tYXN0ZXIvc2xpY2UuanMgbG9kYXNoLXNsaWNlfVxuICoge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9sb2Rhc2gvbG9kYXNoL2Jsb2IvbWFzdGVyLy5pbnRlcm5hbC9jYXN0U2xpY2UuanMgbG9kYXNoLWNhc3Qtc2xpY2V9XG4gKiB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2xvZGFzaC9sb2Rhc2gvY29tbWl0L2U1ZThmMzVjMDY2YzcxYTA0YmE1ODRmNjVhY2MwMTdkMDMyYzAxNzQgbG9kYXNoLWNvbW1pdC1yZW1vdmUtYmFzZS1zbGljZX1cbiAqIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vamFzaGtlbmFzL3VuZGVyc2NvcmUvYmxvYi9tYXN0ZXIvdW5kZXJzY29yZS5qcyNMMTY1MCB1bmRlcnNjb3JlLXNsaWNlfVxuICoge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9yYW1kYS9yYW1kYS9ibG9iL21hc3Rlci9zcmMvc2xpY2UuanN9XG4gKiBAc2VlIHtAbGluayByYW1kYS1zbGljZX1cbiAqIEBzZWUge0BsaW5rIHVuZGVyc2NvcmUtc2xpY2V9XG4gKiBAc2VlIHtAbGluayBsb2Rhc2gtY29tbWl0LXJlbW92ZS1iYXNlLXNsaWNlfVxuICogQHNlZSB7QGxpbmsgbG9kYXNoLWNhc3Qtc2xpY2V9XG4gKiBAc2VlIHtAbGluayBsb2Rhc2gtc2xpY2V9XG4gKlxuICogQGV4YW1wbGVcbiAqXG4gKiAgICAgIHNsaWNlKDEsIDMsIFsnYScsICdiJywgJ2MnLCAnZCddKTsgICAgICAgIC8vPT4gWydiJywgJ2MnXVxuICogICAgICBzbGljZSgxLCBJbmZpbml0eSwgWydhJywgJ2InLCAnYycsICdkJ10pOyAvLz0+IFsnYicsICdjJywgJ2QnXVxuICogICAgICBzbGljZSgwLCAtMSwgWydhJywgJ2InLCAnYycsICdkJ10pOyAgICAgICAvLz0+IFsnYScsICdiJywgJ2MnXVxuICogICAgICBzbGljZSgtMywgLTEsIFsnYScsICdiJywgJ2MnLCAnZCddKTsgICAgICAvLz0+IFsnYicsICdjJ11cbiAqICAgICAgc2xpY2UoMCwgMywgJ3JhbWRhJyk7ICAgICAgICAgICAgICAgICAgICAgLy89PiAncmFtJ1xuICpcbiAqL1xuZnVuY3Rpb24gc2xpY2UobGlzdCwgZnJvbUluZGV4LCB0b0luZGV4KSB7XG4gIGNvbnN0IHRvID0gaXNVbmRlZmluZWQodG9JbmRleCkgPyBsaXN0Lmxlbmd0aCA6IHRvSW5kZXhcbiAgaWYgKGlzU3RyaW5nKGxpc3QpKSByZXR1cm4gc3RyaW5nU2xpY2UuY2FsbChsaXN0LCBmcm9tSW5kZXgsIHRvKVxuXG4gIC8vIGxldCBhcnJheSA9IGlzQXJyYXkobGlzdCkgPyBsaXN0IDogZnJvbShsaXN0KVxuICBsZXQgYXJyYXkgPSBsaXN0XG4gIHJldHVybiBhcnJheVNsaWNlLmNhbGwoYXJyYXksIGZyb21JbmRleCwgdG8pXG59XG5cbi8vIEBUT0RPIHB1dCBpbiBmbGlwcGVkXG4vL1xuXG5tb2R1bGUuZXhwb3J0cyA9IGN1cnJ5KDMsIHByZWZlckV4aXN0aW5nTWV0aG9kKCdzbGljZScsIHNsaWNlKSlcbi8vIG1vZHVsZS5leHBvcnRzID0gY3VycnkoMywgc2xpY2UpXG4iXSwibmFtZXMiOlsiY29uc3QiLCJsZXQiXSwibWFwcGluZ3MiOiJBQUFBQSxHQUFLLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQyxhQUFhLENBQUM7QUFDdENBLEdBQUssQ0FBQyxXQUFXLEdBQUcsT0FBTyxDQUFDLGlCQUFpQixDQUFDO0FBQzlDQSxHQUFLLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQyxjQUFjLENBQUM7QUFDeENBLEdBQUssQ0FBQyxJQUFJLEdBQUcsT0FBTyxDQUFDLGNBQWMsQ0FBQztBQUNwQ0EsR0FBSyxDQUFDLFVBQVUsR0FBRyxPQUFPLENBQUMsc0JBQXNCLENBQUM7QUFDbERBLEdBQUssQ0FBQyxLQUFLLEdBQUcsT0FBTyxDQUFDLGFBQWEsQ0FBQztBQUNwQ0EsR0FBSyxDQUFDLG9CQUFvQixHQUFHLE9BQU8sQ0FBQyw0QkFBNEIsQ0FBQzs7QUFFbEVBLEdBQUssQ0FBQyxXQUFXLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxLQUFLOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBOEMxQyxTQUFTLEtBQUssQ0FBQyxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRTtFQUN2Q0EsR0FBSyxDQUFDLEVBQUUsR0FBRyxXQUFXLENBQUMsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxPQUFPO0VBQ3ZELElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUEsT0FBTyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxTQUFTLEVBQUUsRUFBRSxDQUFDLEVBQUE7OztFQUdoRUMsR0FBRyxDQUFDLEtBQUssR0FBRyxJQUFJO0VBQ2hCLE9BQU8sVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsU0FBUyxFQUFFLEVBQUUsQ0FBQztDQUM3Qzs7Ozs7QUFLRCxNQUFNLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQyxDQUFDLEVBQUUsb0JBQW9CLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDOzsifQ==