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

Javascript 检查数组是否包含给定元素,javascript,arrays,for-loop,Javascript,Arrays,For Loop,我有一个数字数组,并在for循环中向该数组动态添加新的数字。但我需要避免添加数组中已经存在的值。是否有一种JS原生方法可以检查数组中是否存在某些值,而无需执行第二个嵌套循环。我不想使用嵌套循环,因为数组的大小最多可以变化10000个您可以使用JavaScript的本机数组.prototype.indexOf,大多数浏览器都支持: indexOf比for循环快,但算法复杂度仍然是O(n^2)。如果数组的大小变得更大,考虑一个不同的数据结构,比如哈希表。< P>有一些浏览器支持,可以使用这些代码片段

我有一个数字数组,并在for循环中向该数组动态添加新的数字。但我需要避免添加数组中已经存在的值。是否有一种JS原生方法可以检查数组中是否存在某些值,而无需执行第二个嵌套循环。我不想使用嵌套循环,因为数组的大小最多可以变化10000个

您可以使用JavaScript的本机
数组.prototype.indexOf
,大多数浏览器都支持:

indexOf
比for循环快,但算法复杂度仍然是
O(n^2)
。如果数组的大小变得更大,考虑一个不同的数据结构,比如哈希表。

< P>有一些浏览器支持,可以使用这些代码片段来支持所有浏览器

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
试试这个

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;
 } 
函数元素数组(arr,元素){
如果(arr!=null&&arr.length>0){

for(var i=0;i您可以通过使用while循环来轻松避免for循环。[暂停以供笑声…]但说真的,即使是内置方法(大多数浏览器支持)也可能在内部使用循环

您可以改为使用普通对象,并将每个数字作为属性添加到对象中,然后从对象中获取值并将其放入实际数组中(如果方便的话,也可以在对象中使用)。然后,您只需在末尾循环一次“最多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);

或者像我在第一个代码块中做的那样,每次都写它。

只需使用
包含

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

可能重复:感谢您的评论:)是的,它是…这用于循环,我不想使用loops@haynar我不想使用显式循环,我想使用本机方法,因为它比自定义for循环更有效(我知道它在内部使用循环)@haynar这只在浏览器中没有定义显式方法的情况下才使用loppo这再次使用for循环,我需要避免伟大的解决方案:)我真的很喜欢它在这种情况下,我甚至不需要最后一个for来将对象转换为数组,因为在我的情况下,最终值存储的位置没有区别:)现在2017年,当我们有<代码>设置JS中的支持我的问题看起来很有趣:)谢谢你的解决方案,但是另一个解决方案更适合我的需要,所以我正在检查这个解决方案,因为答案听起来不错。JS对象只是散列图,它@nnnn明确地向你展示了如何使用。:)最短答案我喜欢它。
if (!numbersObj[currentNumber])
   numbersObj[currentNumber] = true;
var array1 = [1, 2, 3];
console.log(array1.includes(2)); // true