javascript是否有一个数组的exists()或contains()函数

时间:2010-01-15 03:02:03

标签: javascript jquery arrays

或者你只需​​要做一个循环并检查每个元素吗?

4 个答案:

答案 0 :(得分:6)

Mozilla JS实现和其他现代JS引擎采用了Array.prototype.indexOf方法。

[1].indexOf(1) // 0

如果它不包含它,则返回-1。

IE当然可能还有其他浏览器没有它,官方代码为:

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;
  };
}

答案 1 :(得分:5)

如果你正在使用jQuery:jQuery.inArray( value, array )

更新:指向新jQuery API的指向网址

答案 2 :(得分:0)

您可以查看Javascript 1.6的某些功能。

https://developer.mozilla.org/en/Core_JavaScript_1.5_Guide/Working_with_Arrays#Introduced_in_JavaScript_1.6

如果您只是想知道它是否在那里,您可以使用indexOf来满足您的需求。

<强>更新

如果你转到这个页面,http://www.hunlock.com/blogs/Mastering_Javascript_Arrays,你可以找到一个在IE浏览器和任何其他没有你想要使用的内置功能的浏览器上使用的功能。

答案 3 :(得分:0)

这是使用自己的indexOf方法的一种方法。如果环境中存在Array.prototype.indexOf方法,则此版本会使用此方法;否则,它使用自己的实现。

(此代码已经过测试,但我不保证所有情况的正确性。)

// If Array.prototype.indexOf exists, then indexOf will contain a closure that simply
// calls Array.prototype.indexOf. Otherwise, indexOf will contain a closure that
// *implements* the indexOf function. 
// 
// The net result of using two different closures is that we only have to
// test for the existence of Array.prototype.indexOf once, when the script
// is loaded, instead of every time indexOf is called.

var indexOf = 
    (Array.prototype.indexOf ? 
     (function(array, searchElement, fromIndex) {
         return array.indexOf(searchElement, fromIndex);
     })
     :
     (function(array, searchElement, fromIndex)
      {
          fromIndex = Math.max(fromIndex || 0, 0);
          var i = -1, len = array.length;
          while (++i < len) {
              if (array[i] === searchElement) {
                  return i;
              }
          }
          return -1;
      })
    );