Controlla se un elemento è presente in un array
La funzione che sto usando ora per controllare questo è la seguente:
function inArray(needle,haystack)
{
var count=haystack.length;
for(var i=0;i<count;i++)
{
if(haystack[i]===needle){return true;}
}
return false;
}
Funziona. Quello che sto cercando è se c'è un modo migliore per farlo.
504
3
Codice:
Esecuzione:
Aggiornamento (2017):
Nei browser moderni che seguono lo standard ECMAScript 2016 (ES7), è possibile utilizzare la funzione Array.prototype.includes, che rende molto più facile controllare se un elemento è presente in un array:
Basta usare
indexOf
:Se vuoi supportare i vecchi Internet Explorers (< IE9), dovrai includere il tuo codice attuale come workaround però.
A meno che la tua lista non sia ordinata, hai bisogno di confrontare ogni valore con l'ago. Pertanto, sia la tua soluzione che
indexOf
dovranno eseguire in median/2
confronti. Tuttavia, poichéindexOf
è un metodo incorporato, può utilizzare ulteriori ottimizzazioni e sarà leggermente più veloce in pratica. Nota che a meno che la tua applicazione cerchi nelle liste estremamente spesso (diciamo 1000 volte al secondo) o le liste siano enormi (diciamo 100k voci), la differenza di velocità non avrà importanza.Potete usare la funzione _contains dalla libreria underscore.js per ottenere questo: