我有一个数字数组,并在for循环中动态地向该数组添加新的数字。但是我需要避免添加数组中已经存在的值。有没有一种JS原生方法来检查数组中是否存在某些值,而不需要进行第二次嵌套循环。我不想使用嵌套循环,因为数组的大小可能会变化到10000
发布于 2011-11-23 18:37:43
通过使用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;或者就像我在第一个代码块中所做的那样,每次都重写它。
发布于 2018-05-14 18:55:11
只需使用includes即可。
var array1 = [1, 2, 3];
console.log(array1.includes(2)); // true发布于 2011-11-23 18:14:07
您可以使用JavaScript的原生Array.prototype.indexOf,它在大多数浏览器中都受支持:https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/indexOf
var a = [1, 2, 3];
console.log(a.indexOf(4)); // -1indexOf比for循环更快,但算法复杂度仍然是O(n^2)。如果数组的大小变得更大,请考虑使用不同的数据结构,例如哈希表。
https://stackoverflow.com/questions/8240371
复制相似问题