PDA

Volledige versie bekijken : Array.prototype.valueExists


Voetsjoeba
%Europe/Berlin %716 %2005, 18:11
Kleine functie die nagaat of een waarde bestaat in een array. Er kan ook in plaats van een enkele waarde een array van waarden meegegeven worden, en hoe er moet gecontroleerd worden: ofwel moeten alle waarden van de array aanwezig zijn (mode = "&&") ofwel moet er minimaal 1 van de waarden aanwezig zijn (mode = "||"). Dacht dat dit misschien wel van pas zou kunnen komen ;)

Dit is de eerste versie die ik in een kwartiertje heb gecodeerd, waarschijnlijk zitten er nog een paar bugs in die ik nog niet gevonden heb. Als je er een vind, laat maar weten.

Array.prototype.valueExists = function(val, mode) {
if (val instanceof Array) {
if (mode != "&&" && mode != "||") mode = "&&";
if (mode == "&&") {
for (var all in val) {
if (!this.valueExists(val[all])) {
return false;
break;
}
}
return true;
} else if (mode == "||") {
for (var all in val) {
if (this.valueExists(val[all])) {
return true;
break;
}
}
return false;
}
} else {
for (var all in this) {
if (this[all] == val) {
return true;
break;
}
}
return false;
}
};
test = new Array("Array", ".", "prototype", ".", "valueExists");
testByValue = "Array";
testByMultiple = [".", "proto"];

trace(test.valueExists(testByValue)); // true
trace(test.valueExists(testByMultiple, "&&")); // false
trace(test.valueExists(testByMultiple, "||")); // true

Dauntless
%Europe/Berlin %758 %2005, 19:12
Ziet er leuk uit!

Weet je dat het sneller gaat als je heel de array achter elkaar plakt als string, en dan met indexOf zoekt?
return true;
break;
Als hij al iets returned, graakt hij toch niet meer aan de break; regel? Of zit ik mis?

TheDutch
%Europe/Berlin %765 %2005, 19:21
Handige prototype Voetsjoeba! :)

Voetsjoeba
%Europe/Berlin %772 %2005, 19:32
Ziet er leuk uit!

Weet je dat het sneller gaat als je heel de array achter elkaar plakt als string, en dan met indexOf zoekt?
return true;
break;
Als hij al iets returned, graakt hij toch niet meer aan de break; regel? Of zit ik mis?

Nee, j'hebt gelijk ... eerst stond de break boven de return, maar dat was verkeerd en dus heb ik het omgedraaid maar er niet bij stilgestaan dat die return de for loop zowieso al breekt.

dioneo
%Europe/Berlin %841 %2005, 21:11
...als je heel de array achter elkaar plakt als string...
Is er een equivalent voor implode() dan die het in kan samenvoegen zonder loop?

Tha Narie
%Europe/Berlin %845 %2005, 21:17
explode() = String.split();
implode() = String.join();

dioneo
%Europe/Berlin %360 %2005, 09:38
myThank.great();