首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >检查数组是否包含给定元素

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

Stack Overflow用户
提问于 2011-11-23 18:10:54
回答 5查看 52.3K关注 0票数 5

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

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2011-11-23 18:37:43

通过使用while循环,可以很容易地避免for循环。停下来笑一笑……但说真的,即使是内置的Array.indexOf()方法(大多数浏览器都支持)也可能在内部使用循环。

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

代码语言:javascript
复制
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

代码语言:javascript
复制
if (!numbersObj[currentNumber])
   numbersObj[currentNumber] = true;

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

票数 2
EN

Stack Overflow用户

发布于 2018-05-14 18:55:11

只需使用includes即可。

代码语言:javascript
复制
var array1 = [1, 2, 3];
console.log(array1.includes(2)); // true
票数 13
EN

Stack Overflow用户

发布于 2011-11-23 18:14:07

您可以使用JavaScript的原生Array.prototype.indexOf,它在大多数浏览器中都受支持:https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/indexOf

代码语言:javascript
复制
 var a = [1, 2, 3];
 console.log(a.indexOf(4));   // -1

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

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8240371

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档