Kontroller, om et element er til stede i et array

Den funktion, jeg bruger nu til at kontrollere dette, er følgende:

function inArray(needle,haystack)
{
    var count=haystack.length;
    for(var i=0;i<count;i++)
    {
        if(haystack[i]===needle){return true;}
    }
    return false;
}

Det virker. Det jeg'er på udkig efter er om der er en bedre måde at gøre dette på.

Kode:

function isInArray(value, array) {
  return array.indexOf(value) > -1;
}

Udførelse:

isInArray(1, [1,2,3]); // true

Opdatering (2017):

I moderne browsere, der følger ECMAScript 2016-standarden (ES7), kan du bruge funktionen Array.prototype.includes, som gør det meget nemmere at kontrollere, om et element er til stede i et array:

const array = [1, 2, 3];
const value = 1;
const isInArray = array.includes(value);
console.log(isInArray); // true
Kommentarer (7)

Du skal blot bruge indexOf:

haystack.indexOf(needle) >= 0

Hvis du ønsker at understøtte gamle Internet Explorers (< IE9), er du nødt til inkludere din nuværende kode som en løsning.

Medmindre din liste er sorteret, skal du sammenligne hver værdi med nålen. Derfor vil både din løsning og indexOf skulle udføre n/2 sammenligninger i gennemsnit. Da indexOf imidlertid er en indbygget metode, kan den bruge yderligere optimeringer og vil i praksis være lidt hurtigere. Bemærk, at medmindre dit program søger ekstremt ofte i lister (f.eks. 1000 gange i sekundet), eller hvis listerne er enorme (f.eks. 100k poster), vil hastighedsforskellen ikke have nogen betydning.

Kommentarer (6)

Du kan bruge funktionen _contains fra underscore.js-biblioteket til at opnå dette:

if (_.contains(haystack, needle)) {
  console.log("Needle found.");
};
Kommentarer (2)