找到最好的方式,如果一个项目是一个JavaScript数组? [英] Best way to find if an item is in a JavaScript array?

查看:96
本文介绍了找到最好的方式,如果一个项目是一个JavaScript数组?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述


  

可能重复:结果
   array.contains(OBJ)在JavaScript中


什么是找到一个对象是否是一个数组的最佳方式?

这是我所知道的最好的方式:

 功能包括:(ARR,OBJ){
    对于(VAR I = 0; I< arr.length;我++){
        如果(ARR [I] == OBJ)返回true;
    }
}包括:([1,2,3,4],3); //真
包括:([1,2,3,4],6); //未定义


解决方案

 功能包括:(ARR,OBJ){
    回报(arr.indexOf(OBJ)!= -1);
}

编辑:
这不会对IE6,7或8的工作,虽然。最好的解决方法是,如果它不是present自己定义:


  1. <一个href=\"https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/indexOf\">Mozilla's (ECMA-262)版本:

     如果(!Array.prototype.indexOf)
      {       Array.prototype.indexOf =功能(searchElement / *,*的fromIndex /)    {
        使用严格的;    如果(这===无效0 ||这个===空)
          抛出新的TypeError();    变种T =对象(this);
        VAR LEN = t.length&GT;&GT;&GT; 0;
        如果(LEN === 0)
          返回-1;    变种N = 0;
        如果(的arguments.length大于0)
        {
          N =号码(参数[1]);
          如果(N!== N)
            N = 0;
          否则如果(正== 0&放大器;&放大器; N ==(1/0)及&放大器;!!n ==可 - (1/0))
            N =(N大于0 || -1)* Math.floor(Math.abs(正));
        }    如果(N&GT; = LEN)
          返回-1;    VAR K = N'GT = 0
              ? ñ
              :Math.max(LEN - Math.abs(n)时,0);    对于(; K&LT; LEN; k ++)
        {
          如果(K在T&放大器;&amp; T公司[K] === searchElement)
            复位K;
        }
        返回-1;
      };}


  2. <一个href=\"http://stackoverflow.com/questions/143847/best-way-to-find-an-item-in-a-javascript-array#144172\">Daniel的詹姆斯版本:

     如果(!Array.prototype.indexOf){
      Array.prototype.indexOf =功能(OBJ,的fromIndex){
        如果(的fromIndex == NULL){
            的fromIndex = 0;
        }否则如果(的fromIndex℃,){
            的fromIndex = Math.max(0,+ this.length的fromIndex);
        }
        对于(VAR I =的fromIndex,J = this.length; I&LT;焦耳;我++){
            如果(这[一] === OBJ)
                返回我;
        }
        返回-1;
      };
    }


  3. <一个href=\"http://stackoverflow.com/questions/143847/best-way-to-find-an-item-in-a-javascript-array#144664\">roosteronacid's版本:

      Array.prototype.hasObject =(
      !Array.indexOf?功能(O)
      {
        变种L = this.length + 1;
        而(1 - = 1)
        {
            如果(本[1 - 1] === O)
            {
                返回true;
            }
        }
        返回false;
      }:函数(O)
      {
        回报(this.indexOf(O)== -1!);
      }
    );


Possible Duplicate:
array.contains(obj) in JavaScript

What is the best way to find if an object is in an array?

This is the best way I know:

function include(arr, obj) {
    for(var i=0; i<arr.length; i++) {
        if (arr[i] == obj) return true;
    }
}

include([1,2,3,4], 3); // true
include([1,2,3,4], 6); // undefined

解决方案

function include(arr,obj) {
    return (arr.indexOf(obj) != -1);
}

EDIT: This will not work on IE6, 7 or 8 though. The best workaround is to define it yourself if it's not present:

  1. Mozilla's (ECMA-262) version:

      if (!Array.prototype.indexOf)
      {
    
           Array.prototype.indexOf = function(searchElement /*, fromIndex */)
    
        {
    
    
        "use strict";
    
        if (this === void 0 || this === null)
          throw new TypeError();
    
        var t = Object(this);
        var len = t.length >>> 0;
        if (len === 0)
          return -1;
    
        var n = 0;
        if (arguments.length > 0)
        {
          n = Number(arguments[1]);
          if (n !== n)
            n = 0;
          else if (n !== 0 && n !== (1 / 0) && n !== -(1 / 0))
            n = (n > 0 || -1) * Math.floor(Math.abs(n));
        }
    
        if (n >= len)
          return -1;
    
        var k = n >= 0
              ? n
              : Math.max(len - Math.abs(n), 0);
    
        for (; k < len; k++)
        {
          if (k in t && t[k] === searchElement)
            return k;
        }
        return -1;
      };
    
    }
    

  2. Daniel James's version:

    if (!Array.prototype.indexOf) {
      Array.prototype.indexOf = function (obj, fromIndex) {
        if (fromIndex == null) {
            fromIndex = 0;
        } else if (fromIndex < 0) {
            fromIndex = Math.max(0, this.length + fromIndex);
        }
        for (var i = fromIndex, j = this.length; i < j; i++) {
            if (this[i] === obj)
                return i;
        }
        return -1;
      };
    }
    

  3. roosteronacid's version:

    Array.prototype.hasObject = (
      !Array.indexOf ? function (o)
      {
        var l = this.length + 1;
        while (l -= 1)
        {
            if (this[l - 1] === o)
            {
                return true;
            }
        }
        return false;
      } : function (o)
      {
        return (this.indexOf(o) !== -1);
      }
    );
    

这篇关于找到最好的方式,如果一个项目是一个JavaScript数组?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆