foop
Version:
interfaces that describe their intentions.
93 lines (89 loc) • 6.3 kB
JavaScript
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