Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/366.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在不循环的情况下确定数组中是否包含元素?_Javascript_Arrays - Fatal编程技术网

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

Javascript 如何在不循环的情况下确定数组中是否包含元素?,javascript,arrays,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 javascript中没有这样的方法 某些库(例如jquery)有类似的方法,但它们在内部使用循环。数组对象确实有一个函数,如果对象不存在,该函数将返

如何检查特定元素是否在数组中我不想为此手动编写循环;相反,我想使用一个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

javascript中没有这样的方法


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

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


不管怎样,您认为它将如何在场景下定位该项目?它必须循环!仅仅因为有一个内置函数并不意味着它是神奇的。

您还可以编写一个扩展方法,如中所述

正如@said所说,indexOf函数是您所需要的,但是这个函数是在上引入的,为了兼容性,您可以使用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;
  };
}
if(!Array.prototype.indexOf)
{
Array.prototype.indexOf=函数(elt/*,from*/)
{
var len=this.length>>>0;
var from=Number(参数[1])| | 0;
from=(from<0)
?数学单元(来自)
:数学。地板(从);
如果(从<0开始)
from+=len;
for(;from
来源:

看起来像是

inArray:函数(元素、数组){
for(var i=0,length=array.length;i
啊,有一种方法可以避免循环,而且非常简单,人们只是不跳出框框思考

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"));

圈妈妈,不要圈

您也可以在这里使用indexOf,至少对于支持它的实现是这样的!顺便说一句,我的答案中的链接提供了firefox在数组中内部定位项目的算法(indexOf)。我肯定它会比这个while循环快。@Josh:我怀疑它会快多少。有很多检查来确保正确的参数被传递,等等,所以我不明白为什么会更快@呆头呆脑的:为什么它不能随身携带?源代码就在这里:+1表示它在内部使用循环。以我的经验,我想很多人都不明白,尤其是来自Ruby的人嗯,有一个循环,但是在Ruby中的循环,例如,如果它们是本地的,那么会比在Ruby中编写的更快。例如,特定的检查将用C编写,运行速度比用Ruby编写的循环快得多,因此虽然本机方法可能并不神奇,但它们肯定更快。JavaScript的内置方法也是如此。@Andrew Noyes:是的,但当有人说“我想在不使用循环的情况下完成这项工作”时,从技术上讲是不可能的手工编写的循环必须被解释,这是它们速度变慢的唯一原因。我已经有了一个链接,但是感谢您发布代码!嘿,jQuery.inArray在其gutsI中使用循环编辑了这个,并直接从jQuery源代码添加了inArray函数,仅供参考。可能是真的,但在用户编写的JavaScript代码中没有循环。:)不错,埃里克!不过,这必须表现得非常糟糕。
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;
}
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"));