Вы можете легко избежать цикла for, используя цикл while. [Пауза для смеха ...] А если серьезно, даже встроенный метод 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
содержит только уникальные числа. Тест if с .hasOwnProperty()
является «необязательным» в зависимости от вашей точки зрения.
В первом цикле вы можете проверить, содержит ли numbersObj
currentNumber
:
if (!numbersObj[currentNumber])
numbersObj[currentNumber] = true;
Или просто (пере) пишите это каждый раз, как я делал в первом блоке кода.