Kako v javascriptu preverim, ali polje vsebuje vrednost?
Kateri je najbolj jedrnat in učinkovit način za ugotavljanje, ali polje JavaScripta vsebuje vrednost?
To je edini način, ki ga poznam:
function contains(a, obj) {
for (var i = 0; i < a.length; i++) {
if (a[i] === obj) {
return true;
}
}
return false;
}
Ali obstaja boljši in bolj jedrnat način za to?
To je zelo tesno povezano z vprašanjem Stack Overflow Najboljši način iskanja elementa v polju JavaScript?, ki obravnava iskanje predmetov v polju z uporabo indexOf
.
3744
3
Posodobitev iz leta 2019: Ta odgovor je iz leta 2008 (star 11 let!) in ni relevanten za sodobno uporabo JS. Obljubljeno izboljšanje zmogljivosti je temeljilo na primerjalni analizi, opravljeni v takratnih brskalnikih. Za sodobne kontekste izvajanja JS morda ni relevantno. Če potrebujete enostavno rešitev, poiščite druge odgovore. Če potrebujete najboljšo zmogljivost, sami opravite primerjalno testiranje v ustreznih izvajalnih okoljih.
Kot so povedali drugi, je iteracija skozi polje verjetno najboljši način, vendar je bilo dokazano, da je padajoča zanka
while
najhitrejši način iteracije v jeziku JavaScript. Zato boste morda želeli kodo prepisati na naslednji način:Seveda lahko tudi razširite prototip Array:
In zdaj lahko preprosto uporabite naslednje:
indexOf
morda, vendar je to "razširitev standarda ECMA-262 v jeziku JavaScript; kot taka morda ni prisotna v drugih izvedbah standarda."Primer:
AFAICS Microsoft ne ponuja alternative za to, vendar lahko podobno funkcionalnost dodate poljem v Internet Explorerju (in drugih brskalnikih, ki ne podpirajo
indexOf
), če želite, kot razkrije hitro iskanje v Googlu (na primer ta).Če uporabljate JavaScript 1.6 ali novejši (Firefox 1.5 ali novejši), lahko uporabite Array.indexOf. V nasprotnem primeru boste dobili nekaj podobnega kot v prvotni kodi.