如何在不循环的情况下确定元素是否包含在数组中?

时间:2009-07-03 04:39:01

标签: javascript arrays

如何检查特定元素是否在数组中? 我不想为此手动编写循环;相反,我想使用JavaScript内置函数,可能等同于

new Array(0,1,2,3,6,9,12,15,18).Contains(5)  //return false
new Array(0,1,2,3,6,9,12,15,18).Contains(1)   //return true

6 个答案:

答案 0 :(得分:12)

Array对象确实有一个indexOf函数,如果该对象不存在,它将返回-1。但是,IE不支持此功能。

无论如何,您认为如何在幕后找到该项目?它必须循环!仅仅因为有内置函数并不意味着它是神奇的。

答案 1 :(得分:4)

您也可以编写扩展方法,如this thread中所述。

Array.prototype.contains = function(obj) {
  var i = this.length;
  while (i--) {
    if (this[i] === obj) {
      return true;
    }
  }
  return false;
}
And now you can simply use the following:

alert([1, 2, 3].contains(2)); // => true
alert([1, 2, 3].contains('2')); // => false

答案 2 :(得分:2)

正如@ Josh Stodola所说,indexOf函数是你需要的,但是这个函数是在 JavaScript 1.6 上引入的,为了兼容性,你可以使用Mozilla团队的这个实现,正是Firefox和SpiderMonkey中使用的那个:

if (!Array.prototype.indexOf)
{
  Array.prototype.indexOf = function(elt /*, from*/)
  {
    var len = this.length >>> 0;

    var from = Number(arguments[1]) || 0;
    from = (from < 0)
         ? Math.ceil(from)
         : Math.floor(from);
    if (from < 0)
      from += len;

    for (; from < len; from++)
    {
      if (from in this &&
          this[from] === elt)
        return from;
    }
    return -1;
  };
}

来源:MDC

答案 3 :(得分:1)

javascript中没有这样的方法。

某些库(例如jquery)有类似的方法,但它们在内部使用循环。

答案 4 :(得分:1)

看起来像jQuery.inArray

的工作
inArray: function( elem, array ) {
    for ( var i = 0, length = array.length; i < length; i++ )
    // Use === because on IE, window == document
        if ( array[ i ] === elem )
            return i;

    return -1;
}

答案 5 :(得分:1)

啊,有一种方法可以不循环,这很简单,人们只是不要在盒子外思考。

Array.prototype.contains = function(){     
    var joined = this.join("-~-");
    var re = new RegExp("(^|-~-)" + arguments[0] + "($|-~-)");   
    return joined.match(re) !== null;
}

var arr = ["a","b","c","d"];   
alert(arr.contains("a"));
alert(arr.contains("b"));
alert(arr.contains("c"));
alert(arr.contains("d"));
alert(arr.contains("e"));

循环妈妈,没有循环!

相关问题