• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1/**
2 * lodash 3.1.0 (Custom Build) <https://lodash.com/>
3 * Build: `lodash modern modularize exports="npm" -o ./`
4 * Copyright 2012-2015 The Dojo Foundation <http://dojofoundation.org/>
5 * Based on Underscore.js 1.8.2 <http://underscorejs.org/LICENSE>
6 * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
7 * Available under MIT license <https://lodash.com/license>
8 */
9
10/**
11 * The base implementation of `_.indexOf` without support for binary searches.
12 *
13 * @private
14 * @param {Array} array The array to search.
15 * @param {*} value The value to search for.
16 * @param {number} fromIndex The index to search from.
17 * @returns {number} Returns the index of the matched value, else `-1`.
18 */
19function baseIndexOf(array, value, fromIndex) {
20  if (value !== value) {
21    return indexOfNaN(array, fromIndex);
22  }
23  var index = fromIndex - 1,
24      length = array.length;
25
26  while (++index < length) {
27    if (array[index] === value) {
28      return index;
29    }
30  }
31  return -1;
32}
33
34/**
35 * Gets the index at which the first occurrence of `NaN` is found in `array`.
36 * If `fromRight` is provided elements of `array` are iterated from right to left.
37 *
38 * @private
39 * @param {Array} array The array to search.
40 * @param {number} fromIndex The index to search from.
41 * @param {boolean} [fromRight] Specify iterating from right to left.
42 * @returns {number} Returns the index of the matched `NaN`, else `-1`.
43 */
44function indexOfNaN(array, fromIndex, fromRight) {
45  var length = array.length,
46      index = fromIndex + (fromRight ? 0 : -1);
47
48  while ((fromRight ? index-- : ++index < length)) {
49    var other = array[index];
50    if (other !== other) {
51      return index;
52    }
53  }
54  return -1;
55}
56
57module.exports = baseIndexOf;
58