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
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.