Просмотр полной версии : Как массив проверить на наличие элемента?
Надо проверить массив, есть ли там определенное число. Кто подскажет? Где-то мне попадался способ без цикличной проверки.
a=[1,2,3,4,5,6,7,8,9,0];
x=8;
for(i=0;i<a.length;i++) {
if(a[i]==x) {
trace("!!!");
break;
}
}
Egoritch
16.12.2001, 19:21
Где-то мне попадался способ без цикличной проверки...
Subj. В SQLe ;)
а если найдёшь такое на флэше, ц, джабе - плз, зымыль и мне ;)
Barmaglot
16.12.2001, 19:31
Без проверки всех элементов подряд можно обойтись ТОЛЬКО если массив упорядочен.
Самый лучший способ это метод indexOf, который нужно создать.
Лучше пока ничего не придумано. Но он опять же использует цикл.
indexOf нужно делать самому.
Array.prototype.indexOf = function(searched)
{
for(var indexOf_i=0;indexOf_i<this.length;indexOf_i++)
{
if(searched==this[indexOf_i])
{
return indexOf_i;
}
}
return -1;
}
//::: EXAMPLE :::
arr = [1,2,3,4,5,6,7,8,9,10];
if(arr.indexOf(3) != -1)
{
trace ("YES!!!")
}
Barmaglot
16.12.2001, 21:18
Перебором искать хорошо, если у вас массив длиной 10 - 50; а если он большой и искать нужно часто, то лучше его сначала отсортировать, а затем уже искать в нем с помощью бинарного поиска или еще как кому что нравится.
Алгоритмы и сортировки и поиска довольно простые, любой сможет реализовать. К тому же есть всякие доступные библиотеки, оттуда можно их взять и переделать для флэша.
Че больше размер массива, тем сильнее разница в скорости.
Для массива чисел длиной 1000 разница будет примерно раз в 50-200;
вот подумал... и мысля посетила... (страно это :D )
а не быстрее ли получится, если массив .toString()
а потом строку .indexOf( searchString, fromIndex );
сам не пробовал, но может в этом есть смысел? :p
попробовал...
смысла нет :mad: :mad: :mad: :mad: :mad:
если содержание массива статично и нужно часто обращаться к нему на предмет проверки данных могу предложить такое решение, сам иногда пользуюсь.
сначала создадим объект которые содержит поля с буливыемыми значениями.
arr = [0,1,2,3,4,5,6,7,8,0];
source_arr_object = {};
for (var i=0;i<arr.length;i++)
{
source_arr_object[arr[i]] = true;
}
при необходимости узнать наличия значения
делаем так
if(source_arr_object[значение] == true)
{
trace ("YES!")
}
плохо тем что значения могут быть толко номера и строки,
второе, что при изменении массива, нужно будет обновлять объект значений.
Но когда массив статичный и значения строки и цифры, то имеет смысл....
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.