我可以使用什么代替Array.prototype.indexOf方法?

时间:2018-03-27 18:14:10

标签: javascript

我想使用自己的方法而不是indexOf()方法,我尝试了这个。如果我使用ie 8及更早版本。



var a = ["i", "you", "him"];
var b = "him";
var indexb;

for (var i = 0; i <= a.length; i++) {
  if (b == a[i]) {
    indexb = i;
  break
  }
}

console.log(indexb) //result is 2.so true and i use i=a.length for stop.
&#13;
&#13;
&#13;

这种方式是否正确,我尝试使用大数组,我得到2ms的结果

1 个答案:

答案 0 :(得分:0)

如果您想进行优化,请从方法的官方MDN polyfill开始,如果您想支持不兼容的浏览器。

请参阅: MDN Web Docs - Array.prototype.indexOf() - Polyfill

你可以在那里开始优化。

if (!Array.prototype.indexOf) {
  Array.prototype.indexOf = function indexOf(member, startFrom) {
    if (this == null) {
      throw new TypeError("Array.prototype.indexOf() - can't convert `" + this + "` to object");
    }
    var index = isFinite(startFrom) ? Math.floor(startFrom) : 0,
      that = this instanceof Object ? this : new Object(this),
      length = isFinite(that.length) ? Math.floor(that.length) : 0;
    if (index >= length) {
      return -1;
    }
    if (index < 0) {
      index = Math.max(length + index, 0);
    }
    if (member === undefined) {
      do {
        if (index in that && that[index] === undefined) {
          return index;
        }
      } while (++index < length);
    } else {
      do {
        if (that[index] === member) {
          return index;
        }
      } while (++index < length);
    }
    return -1;
  };
}