我想使用自己的方法而不是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;
这种方式是否正确,我尝试使用大数组,我得到2ms的结果
答案 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;
};
}