Проверка дали даден елемент присъства в масив
Функцията, която използвам сега, за да проверя това, е следната:
function inArray(needle,haystack)
{
var count=haystack.length;
for(var i=0;i<count;i++)
{
if(haystack[i]===needle){return true;}
}
return false;
}
Тя работи. Това, което търся, е дали има по-добър начин да се направи това.
504
3
Код:
Изпълнение:
Актуализация (2017 г.):
В съвременните браузъри, които следват стандарта ECMAScript 2016 (ES7), можете да използвате функцията Array.prototype.includes, която значително улеснява проверката дали даден елемент присъства в масив:
Просто използвайте
indexOf
:Ако искате да поддържате старите Internet Explorers (< IE9), ще трябва да включите текущия си код като заобиколен вариант, въпреки че.
Освен ако списъкът ви не е сортиран, трябва да сравнявате всяка стойност с иглата. Следователно както вашето решение, така и
indexOf
ще трябва да изпълняват средно поn/2
сравнения. Тъй като обачеindexOf
е вграден метод, той може да използва допълнителни оптимизации и на практика ще бъде малко по-бърз. Обърнете внимание, че ако приложението ви не търси в списъци изключително често (например 1000 пъти в секунда) или списъците не са огромни (например 100 хил. записа), разликата в скоростта няма да има значение.Можете да използвате функцията _contains от библиотеката underscore.js, за да постигнете това: