Javascript 交叉划船机;inArray“;函数(不带jQuery)

Javascript 交叉划船机;inArray“;函数(不带jQuery),javascript,arrays,Javascript,Arrays,我没有意识到的交叉浏览器兼容性差。但现在我做到了,我需要找到一种方法来实现同样的事情,但不使用前面的方法 我在谷歌上搜索了一会儿,但没有找到真正令人信服的答案。目前,我正在使用循环(但这很慢,我相信还有更好的方法) 旁注: 我不能使用jQuery或任何其他库/框架 它不一定需要返回索引(简单的true/false) (没问题) 我认为没有必要分享我的代码,因为你们都知道数组循环检查是什么样子的(而且它会降低你们的智商) 目前,我正在使用循环(但这很慢,我相信还有更好的方法) 无论你做什么,最

我没有意识到的交叉浏览器兼容性差。但现在我做到了,我需要找到一种方法来实现同样的事情,但不使用前面的方法

我在谷歌上搜索了一会儿,但没有找到真正令人信服的答案。目前,我正在使用循环(但这很慢,我相信还有更好的方法)

旁注:

  • 我不能使用jQuery或任何其他库/框架
  • 它不一定需要返回索引(简单的true/false) (没问题)
我认为没有必要分享我的代码,因为你们都知道数组循环检查是什么样子的(而且它会降低你们的智商)

目前,我正在使用循环(但这很慢,我相信还有更好的方法)

无论你做什么,最终都会涉及到循环。除非你发明了一个O(1)算法来搜索数组。使用循环查找相应的元素没有什么错。您甚至可以使用此方法扩展内置数组对象,以便可以重用它。

来自:

if(!Array.prototype.indexOf){
Array.prototype.indexOf=函数(searchElement/*,fromIndex*/){
“严格使用”;
如果(this==null){
抛出新的TypeError();
}  
var t=对象(本);
var len=t.length>>>0;
如果(len==0){
返回-1;
}  
var n=0;
如果(arguments.length>0){
n=数量(参数[1]);
if(n!=n){//验证是否为NaN的快捷方式
n=0;
}如果(n!=0&&n!=无穷大&&n!=-无穷大){
n=(n>0 | |-1)*数学地板(数学abs(n));
}  
}  
如果(n>=len){
返回-1;
}  
var k=n>=0?n:Math.max(len-Math.abs(n),0);
对于(;k
这将检查它是否看到本机实现,如果没有实现它

值得注意的怪癖:


t.length>>0
是一个无符号移位,用于将其强制为正数

以下是inArray在jQuery中的实现方式:

function inArray(elem, array, i) {
    var len;
    if ( array ) {
        if ( array.indexOf ) {
            return array.indexOf.call( array, elem, i );
        }
        len = array.length;
        i = i ? i < 0 ? Math.max( 0, len + i ) : i : 0;
        for ( ; i < len; i++ ) {
            // Skip accessing in sparse arrays
            if ( i in array && array[ i ] === elem ) {
                return i;
            }
        }
    }
    return -1;
}
函数数组(元素、数组、i){
瓦伦;
if(数组){
if(array.indexOf){
返回array.indexOf.call(array,elem,i);
}
len=数组长度;
i=i?i<0?数学最大值(0,len+i):i:0;
对于(;i
您不能使用jQuery,但为什么不使用它们的实现呢?:-)


致以最良好的祝愿

你可以使用Mozilla提供的。你想提供
IE lt 9
和…循环一点也不坏。最可能的原因是他的老师试图让他想出自己的代码。@kennebec我是自己的老师(我靠自己和爱好学习)
function inArray(elem, array, i) {
    var len;
    if ( array ) {
        if ( array.indexOf ) {
            return array.indexOf.call( array, elem, i );
        }
        len = array.length;
        i = i ? i < 0 ? Math.max( 0, len + i ) : i : 0;
        for ( ; i < len; i++ ) {
            // Skip accessing in sparse arrays
            if ( i in array && array[ i ] === elem ) {
                return i;
            }
        }
    }
    return -1;
}