UNPKG

foop

Version:

interfaces that describe their intentions.

93 lines (89 loc) 6.3 kB
var curry = require('../fp/curry') /** * Returns the position of the first occurrence of an item in an array, or -1 * if the item is not included in the array. [`R.equals`](#equals) is used to * determine equality. * @memberOf util * @since 5.0.0-beta.7 * @curried 2 * * @param {*} target The item to find. * @param {Array} xs The array to search in. * @return {Number} the index of the target, or -1 if the target is not found. * * @func * @fork v0.1.0 * @category List * @sig a -> [a] -> Number * * @see fp/lastIndexOf * @see Ramda/indexOf * * @example * * indexOf(3, [1,2,3,4]); //=> 2 * indexOf(10, [1,2,3,4]); //=> -1 * */ var indexOf = function(needle, haystack) { return haystack.indexOf(needle) } module.exports = curry(2, indexOf) // @NOTE ramda polyfil // var equals = require('../equals'); // module.exports = function _indexOf(list, a, idx) { // var inf, item; // // Array.prototype.indexOf doesn't exist below IE9 // if (typeof list.indexOf === 'function') { // switch (typeof a) { // case 'number': // if (a === 0) { // // manually crawl the list to distinguish between +0 and -0 // inf = 1 / a; // while (idx < list.length) { // item = list[idx]; // if (item === 0 && 1 / item === inf) { // return idx; // } // idx += 1; // } // return -1; // } else if (a !== a) { // // NaN // while (idx < list.length) { // item = list[idx]; // if (typeof item === 'number' && item !== item) { // return idx; // } // idx += 1; // } // return -1; // } // // non-zero numbers can utilise Set // return list.indexOf(a, idx); // // // all these types can utilise Set // case 'string': // case 'boolean': // case 'function': // case 'undefined': // return list.indexOf(a, idx); // // case 'object': // if (a === null) { // // null can utilise Set // return list.indexOf(a, idx); // } // } // } // // anything else not covered above, defer to equals // while (idx < list.length) { // if (equals(list[idx], a)) { // return idx; // } // idx += 1; // } // return -1; // }; // //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXhPZi5qcyIsInNvdXJjZXMiOlsiaW5kZXhPZi5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJjb25zdCBjdXJyeSA9IHJlcXVpcmUoJy4uL2ZwL2N1cnJ5JylcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBwb3NpdGlvbiBvZiB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBvZiBhbiBpdGVtIGluIGFuIGFycmF5LCBvciAtMVxuICogaWYgdGhlIGl0ZW0gaXMgbm90IGluY2x1ZGVkIGluIHRoZSBhcnJheS4gW2BSLmVxdWFsc2BdKCNlcXVhbHMpIGlzIHVzZWQgdG9cbiAqIGRldGVybWluZSBlcXVhbGl0eS5cbiAqIEBtZW1iZXJPZiB1dGlsXG4gKiBAc2luY2UgNS4wLjAtYmV0YS43XG4gKiBAY3VycmllZCAyXG4gKlxuICogQHBhcmFtIHsqfSB0YXJnZXQgVGhlIGl0ZW0gdG8gZmluZC5cbiAqIEBwYXJhbSB7QXJyYXl9IHhzIFRoZSBhcnJheSB0byBzZWFyY2ggaW4uXG4gKiBAcmV0dXJuIHtOdW1iZXJ9IHRoZSBpbmRleCBvZiB0aGUgdGFyZ2V0LCBvciAtMSBpZiB0aGUgdGFyZ2V0IGlzIG5vdCBmb3VuZC5cbiAqXG4gKiBAZnVuY1xuICogQGZvcmsgdjAuMS4wXG4gKiBAY2F0ZWdvcnkgTGlzdFxuICogQHNpZyBhIC0+IFthXSAtPiBOdW1iZXJcbiAqXG4gKiBAc2VlIGZwL2xhc3RJbmRleE9mXG4gKiBAc2VlIFJhbWRhL2luZGV4T2ZcbiAqXG4gKiBAZXhhbXBsZVxuICpcbiAqICAgICAgaW5kZXhPZigzLCBbMSwyLDMsNF0pOyAvLz0+IDJcbiAqICAgICAgaW5kZXhPZigxMCwgWzEsMiwzLDRdKTsgLy89PiAtMVxuICpcbiAqL1xuY29uc3QgaW5kZXhPZiA9IGZ1bmN0aW9uKG5lZWRsZSwgaGF5c3RhY2spIHtcbiAgcmV0dXJuIGhheXN0YWNrLmluZGV4T2YobmVlZGxlKVxufVxubW9kdWxlLmV4cG9ydHMgPSBjdXJyeSgyLCBpbmRleE9mKVxuXG5cbi8vIEBOT1RFIHJhbWRhIHBvbHlmaWxcbi8vIHZhciBlcXVhbHMgPSByZXF1aXJlKCcuLi9lcXVhbHMnKTtcbi8vIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gX2luZGV4T2YobGlzdCwgYSwgaWR4KSB7XG4vLyAgIHZhciBpbmYsIGl0ZW07XG4vLyAgIC8vIEFycmF5LnByb3RvdHlwZS5pbmRleE9mIGRvZXNuJ3QgZXhpc3QgYmVsb3cgSUU5XG4vLyAgIGlmICh0eXBlb2YgbGlzdC5pbmRleE9mID09PSAnZnVuY3Rpb24nKSB7XG4vLyAgICAgc3dpdGNoICh0eXBlb2YgYSkge1xuLy8gICAgICAgY2FzZSAnbnVtYmVyJzpcbi8vICAgICAgICAgaWYgKGEgPT09IDApIHtcbi8vICAgICAgICAgICAvLyBtYW51YWxseSBjcmF3bCB0aGUgbGlzdCB0byBkaXN0aW5ndWlzaCBiZXR3ZWVuICswIGFuZCAtMFxuLy8gICAgICAgICAgIGluZiA9IDEgLyBhO1xuLy8gICAgICAgICAgIHdoaWxlIChpZHggPCBsaXN0Lmxlbmd0aCkge1xuLy8gICAgICAgICAgICAgaXRlbSA9IGxpc3RbaWR4XTtcbi8vICAgICAgICAgICAgIGlmIChpdGVtID09PSAwICYmIDEgLyBpdGVtID09PSBpbmYpIHtcbi8vICAgICAgICAgICAgICAgcmV0dXJuIGlkeDtcbi8vICAgICAgICAgICAgIH1cbi8vICAgICAgICAgICAgIGlkeCArPSAxO1xuLy8gICAgICAgICAgIH1cbi8vICAgICAgICAgICByZXR1cm4gLTE7XG4vLyAgICAgICAgIH0gZWxzZSBpZiAoYSAhPT0gYSkge1xuLy8gICAgICAgICAgIC8vIE5hTlxuLy8gICAgICAgICAgIHdoaWxlIChpZHggPCBsaXN0Lmxlbmd0aCkge1xuLy8gICAgICAgICAgICAgaXRlbSA9IGxpc3RbaWR4XTtcbi8vICAgICAgICAgICAgIGlmICh0eXBlb2YgaXRlbSA9PT0gJ251bWJlcicgJiYgaXRlbSAhPT0gaXRlbSkge1xuLy8gICAgICAgICAgICAgICByZXR1cm4gaWR4O1xuLy8gICAgICAgICAgICAgfVxuLy8gICAgICAgICAgICAgaWR4ICs9IDE7XG4vLyAgICAgICAgICAgfVxuLy8gICAgICAgICAgIHJldHVybiAtMTtcbi8vICAgICAgICAgfVxuLy8gICAgICAgICAvLyBub24temVybyBudW1iZXJzIGNhbiB1dGlsaXNlIFNldFxuLy8gICAgICAgICByZXR1cm4gbGlzdC5pbmRleE9mKGEsIGlkeCk7XG4vL1xuLy8gICAgICAgLy8gYWxsIHRoZXNlIHR5cGVzIGNhbiB1dGlsaXNlIFNldFxuLy8gICAgICAgY2FzZSAnc3RyaW5nJzpcbi8vICAgICAgIGNhc2UgJ2Jvb2xlYW4nOlxuLy8gICAgICAgY2FzZSAnZnVuY3Rpb24nOlxuLy8gICAgICAgY2FzZSAndW5kZWZpbmVkJzpcbi8vICAgICAgICAgcmV0dXJuIGxpc3QuaW5kZXhPZihhLCBpZHgpO1xuLy9cbi8vICAgICAgIGNhc2UgJ29iamVjdCc6XG4vLyAgICAgICAgIGlmIChhID09PSBudWxsKSB7XG4vLyAgICAgICAgICAgLy8gbnVsbCBjYW4gdXRpbGlzZSBTZXRcbi8vICAgICAgICAgICByZXR1cm4gbGlzdC5pbmRleE9mKGEsIGlkeCk7XG4vLyAgICAgICAgIH1cbi8vICAgICB9XG4vLyAgIH1cbi8vICAgLy8gYW55dGhpbmcgZWxzZSBub3QgY292ZXJlZCBhYm92ZSwgZGVmZXIgdG8gZXF1YWxzXG4vLyAgIHdoaWxlIChpZHggPCBsaXN0Lmxlbmd0aCkge1xuLy8gICAgIGlmIChlcXVhbHMobGlzdFtpZHhdLCBhKSkge1xuLy8gICAgICAgcmV0dXJuIGlkeDtcbi8vICAgICB9XG4vLyAgICAgaWR4ICs9IDE7XG4vLyAgIH1cbi8vICAgcmV0dXJuIC0xO1xuLy8gfTtcbi8vXG4iXSwibmFtZXMiOlsiY29uc3QiXSwibWFwcGluZ3MiOiJBQUFBQSxHQUFLLENBQUMsS0FBSyxHQUFHLE9BQU8sQ0FBQyxhQUFhLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUE0QnBDQSxHQUFLLENBQUMsT0FBTyxHQUFHLFNBQVMsTUFBTSxFQUFFLFFBQVEsRUFBRTtFQUN6QyxPQUFPLFFBQVEsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDO0NBQ2hDO0FBQ0QsTUFBTSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OyJ9