gruss Manuel, hi Tom
was hältst Du denn von assoziativen Arrays?
http://de.selfhtml.org/javascript/objekte/array.htm#assoziative_arraysDa kannst Du dann gleich nachfragen, ob das Element unter diesem Namen angeleget ist
und die Suche in der Variablen-Definitionsliste wird von JavaScript selbst vorgenommen.Liebe Grüße aus http://www.braunschweig.de
Tom
wenn iteration vermieden werden soll, ist dieser
ansatz der einzig moegliche, gleichzeitig moechte
ich aber einige langlebige missverstaendnisse aus
dem weg raeumen:
"in javascript gibt es keine 'assoziativen arrays'!"
"jedes dennoch im javascript-kontext auftauchende
'assoziative array' wurde brutal vergewaltigt!"
_das_ist_so_ : warum ist das so?
konstrukte der art ...
var assocArr = new Arr();
assocArr["keyName01"] = "something";
assocArr["keyName02"] = "something else";
...
missbrauchen den Array-konstruktor, da hier
offensichtlich "nur" ein einfaches objekt mit ein
paar eigenschaften erzeugt werden soll - weder die
eigenschaft "length" noch die array-methoden, ueber
die ein array-objekt verfuegen kann, werden von einer
solchen chimaere jemals benoetigt - deswegen bitte so:
var simpleObj = new Object();
simpleObj.propName01 = "something";
simpleObj.propName02 = "something else";
oder aber zur dynamischen erzeugung von objekt-eigenschaften
bzw. fuer ehemalige "assoziative straftaeter":
var simpleObj = {}; // {} literal fuer new Object();
simpleObj["propName01"] = "something";
simpleObj["propName02"] = "something else";
oder aber kuerzer als objekt-literal:
var simpleObj = {
propName01: "something",
propName02: "something else"
};
bzw.:
var simpleObj = {
"propName01": "something",
"propName02": "something else"
};
wobei die vorvorletzte und die zuletzt aufgezeigte variante
jeweils die moeglichkeit bieten, namen fuer objekteigenschaften
zu verwenden, welche die namenskonvention fuer variablen verletzen
wuerden (leerzeichen, sonderzeichen etc.);
ende teil 1:
---------
teil 2:
Bin gerade dabei, mich darin einzulesen. Allerdings befinden sich in meinem einige Zahlen
zwischen 1 und 64 und läuft eine Schleife (x=1;x<=64;x++) durch, die prüft, ob der Laufindex
x im Array enthalten ist.
Ob dann die Namensgebung für die Arrayfelder sinnvoll ist, weiß ich noch nicht, weil so auch
das anlegen des Array aufwendiger wird.Gruss,manu
@manu:
nachdem Du teil 1 gelesen hast, sollte dir
folgendes kommentierte beispiel weiterhelfen:
var testStr = "something special";
var testArr = [
1234,
"hi",
9876,
"04",
testStr
];
var keyNames = function() {
var i, obj = {};
for (i=0; i<testArr.length; i++) {
//alle eintraege aus "testArr" werden
//boolsche eigenschaften des objekts
//"obj" mit dem wert [true];
obj[testArr[i].toString()] = true;
}
return obj;
}(); /* keyNames ist jetzt ein objekt
welches zur schnellpruefung auf werte
aus dem array "testArr" herangezogen
werden kann, ohne das fuer jeden test
dieses array erst durchlaufen werden
muss; */
alert("keyNames:\n\n" + ((typeof keyNames.toSource == "function") ? (keyNames.toSource()) : (keyNames)));
function isInTestArr(str) { // schnelltest;
return ((keyNames[str] === true) ? (true) : (false));
}
alert("isInTestArr:\n\n1234 : " + isInTestArr(1234) +
"\n"hi" : " + isInTestArr("hi") + "\n9876 : " +
isInTestArr(9876) + "\n"04" : " + isInTestArr("04") +
"\n"" + testStr + "" : " + isInTestArr(testStr) +
"\n\n"something else" : " + isInTestArr("something else"));
by(t)e by(t)e - peterS. - pseliger@gmx.net
sh:| fo:) ch:? rl:| br:& n3:} n4:# ie:| mo:{ va:| de:[ zu:] fl:) ss:) ls:& js:)