Controleer of een element aanwezig is in een array

De functie die ik nu gebruik om dit te controleren is de volgende:

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

Het werkt. Waar ik naar op zoek ben is of er een betere manier is om dit te doen.

Code:

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

Uitvoering:

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

Update (2017):

In moderne browsers die de ECMAScript 2016 (ES7) standaard volgen, kun je de functie Array.prototype.includes gebruiken, die het veel eenvoudiger maakt om te controleren of een item aanwezig is in een array:

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

Gebruik gewoon indexOf:

haystack.indexOf(needle) >= 0

Als je oude Internet Explorers (< IE9) wilt ondersteunen, zul je je huidige code moeten opnemen als workaround though.

Tenzij je lijst gesorteerd is, moet je elke waarde vergelijken met de naald. Daarom zullen zowel jouw oplossing als indexOf gemiddeld n/2 vergelijkingen moeten uitvoeren. Echter, omdat indexOf een ingebouwde methode is, kan het extra optimalisaties gebruiken en zal het in de praktijk iets sneller zijn. Merk op dat tenzij uw toepassing extreem vaak in lijsten zoekt (zeg 1000 keer per seconde) of de lijsten enorm groot zijn (zeg 100k entries), het snelheidsverschil er niet toe zal doen.

Commentaren (6)

Je kunt de _contains functie uit de underscore.js bibliotheek gebruiken om dit te bereiken:

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