检查数组是否包含给定元素

时间:2011-11-23 10:10:54

标签: javascript arrays for-loop

我有一个数字数组,并在for循环中动态地向该数组添加新数字。但我需要避免添加数组中已存在的值。是否存在JS本机方式来检查数组中是否存在某些值而不执行第二个嵌套循环。我不想使用嵌套循环,因为数组的大小可能会变化到10000

5 个答案:

答案 0 :(得分:6)

您可以使用大多数浏览器支持的JavaScript的原生Array.prototype.indexOfhttps://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/indexOf

 var a = [1, 2, 3];
 console.log(a.indexOf(4));   // -1

indexOf比for-loop更快,但算法复杂度仍为O(n^2)。如果数组的大小变得更大,请考虑使用不同的数据结构,例如哈希表。

答案 1 :(得分:2)

使用while循环可以轻松避免for循环。 [暂停笑声......]但严重的是,即使是内置的Array.indexOf()方法(大多数浏览器都支持)也可能在内部使用循环。

您可以使用普通对象,并将每个数字作为属性添加到对象中,然后从对象中获取值并将它们放在实际数组中(或者如果方便的话,只在对象中使用它们) 。然后你只需要在最后一次循环“最多10000”数字:

var numbersObj = {},
    numbersArray = [];

// your existing for statement here
for (var i=0; i<something; i++) {
   var currentNumber = somethingElse(); // whatever your existing code is to
                                    // determine the number to add goes here

   // put the number in the object (as a key)
   numersObj[currentNumber] = true;
}

// copy numbers out of object into array
for (var k in numbersObj)
   if (numbersObj.hasOwnProperty(k))
      numbersArray.push(k);

之后numbersArray仅包含唯一数字。 .hasOwnProperty()的if测试是“可选的”,具体取决于您的观点。

在第一个循环中,您可以检查numbersObj是否已经拥有currentNumber

if (!numbersObj[currentNumber])
   numbersObj[currentNumber] = true;

或者像我在第一个代码块中那样每次都写(或者)。

答案 2 :(得分:1)

试试这个,

function eleContainsInArray(arr,element){
    if(arr != null && arr.length >0){
        for(var i=0;i<arr.length;i++){
            if(arr[i] == element)
                return true;
        }
    }
    return false;
 } 

答案 3 :(得分:0)

某些浏览器支持Array.indexOf,您可以使用此代码段来支持所有浏览器

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

答案 4 :(得分:0)

只需使用includes

var array1 = [1, 2, 3];
console.log(array1.includes(2)); // true
相关问题