HighDots Forums  

Array Zugriff

Javascript (German) Programmiersprache JavaScript. (de.comp.lang.javascript)


Discuss Array Zugriff in the Javascript (German) forum.



Reply
 
Thread Tools Display Modes
  #1  
Old   
Stefan Becker
 
Posts: n/a

Default Array Zugriff - 12-05-2007 , 11:54 AM






Hallo,

geht folgendes nicht unter js?

Besetzte_posten = new Array();
Besetzte_posten[lf1612] = new Array();
Besetzte_posten[lf1612]["fahrzeugfuehrer"] ="0";
for(var i=1;i<8;i++)
{
Besetzte_posten[lf1612]["mannschaft"+i] ="0";
}

[..]
var fahrzeug = lf1612;
var posten =
Besetzte_posten[fahrzeug][posten]=1;

Geht das so nicht?


--
MfG

Stefan Becker

Reply With Quote
  #2  
Old   
Stefan Becker
 
Posts: n/a

Default Re: Array Zugriff - 12-05-2007 , 01:48 PM







"Gregor Kofler" <usenet (AT) gregorkofler (DOT) at> schrieb im Newsbeitrag
news:c70e6$4756f48f$557f27b1$20751 (AT) news (DOT) inode.at...

Quote:
JS kennt keine assoziativen Arrays. Was ist "lf1612"?

lf1612 wie auch posten ist ein String, der bei onClick übergeben wird.

Ich wollte mir so eine abfrage sparen, aber dann muss ich wohl mit
switch von String in einen Int wechseln.

Stefan



Reply With Quote
  #3  
Old   
Thomas 'PointedEars' Lahn
 
Posts: n/a

Default Re: Array Zugriff - 12-05-2007 , 05:20 PM



Stefan Becker wrote:
Quote:
"Gregor Kofler" <usenet (AT) gregorkofler (DOT) at> schrieb im Newsbeitrag
news:c70e6$4756f48f$557f27b1$20751 (AT) news (DOT) inode.at...
Bitte keine Einleitungsromane --> http://oe-faq.de/

Quote:
Ich wollte mir so eine abfrage sparen, aber dann muss ich wohl
mit switch von String in einen Int wechseln.
Es wäre der Aufklärung Deiner Missverständnisse und somit der Lösung Deiner
Probleme dienlich, wenn Du verständliche Terminologie verwendetest.

Ein "switch von String in einen Int" findet jedenfalls nicht statt. Schon
allein deshalb nicht, weil ECMAScript-Implementationen von Editionen bis
einschliesslich 3 den Datentyp `int' oder `Int' nicht kennen; und etwas
anderes ist clientseitig bisher nicht implementiert. Es gibt dort nur
einen numerischen Typ, eine Repräsentation von IEEE-754 doppeltgenauen
Fliesskommazahlen, nämlich `Number'.

Und dass JS, wie von Gregor richtig erklärt, keine assoziativen Arrays
kennt, heisst noch lange nicht, dass es keine Datenstrukturen kennt, bei
denen nichtnumerische Namen mit beliebigen Werten verknüpft werden können.
Ganz im Gegenteil: *jedes* Objekt ist eine solche Datenstruktur, über die
Zuordnung von Eigenschaftswerten zu Eigenschaften. Dafür braucht man kein
Array-Objekt.


PointedEars


Reply With Quote
  #4  
Old   
Stefan Becker
 
Posts: n/a

Default Re: Array Zugriff - 12-06-2007 , 06:33 AM




"Thomas 'PointedEars' Lahn" <PointedEars (AT) web (DOT) de> schrieb :

Das ist mein Webforumular:

<table id="table1612" style="display:none;">
<tr><td colspan="3"><b>LF16/12</b></td></tr>
<tr><td>Fahrzeugführer: <select name="lf1612_fahrzeugfuehrer"
id="lf1612_fahrzeugfuehrer" size="1"
onChange="GruppenstaerkeBerechnen('truppmann','fah rzeugfuehrer','lf1612')"><option
value="-">-</option><option value="person1"
Quote:
Person1</option></select><br/
Gruppenführer: <select name="lf1612_gruppenfuehrer"
id="lf1612_gruppenfuehrer" size="1"
onChange="GruppenstaerkeBerechnen('gruppenfuehrer' ,'gruppenfuehrer','lf1612')"><option
value="-">-</option>><option value="person1"
Quote:
Person1</option></select><br/
Mannschaft: <select name="lf1612_mannschaft1" size="1"
onChange="GruppenstaerkeBerechnen('truppmann','man nschaft1','lf1612')"><option
value="-">-</option>><option value="person1"
Quote:
Person1</option></select><br/></td
td>Mannschaft: <select name="lf1612_mannschaft2" size="1"
onChange="GruppenstaerkeBerechnen('truppmann','man nschaft2','lf1612')"><option
value="-">-</option>><option value="person1"
Quote:
Person1</option></select><br/
Mannschaft: <select name="lf1612_mannschaft3" size="1"
onChange="GruppenstaerkeBerechnen('truppmann','man nschaft3','lf1612')"><option
value="-">-</option>><option value="person1"
Quote:
Person1</option></select><br/
Mannschaft: <select name="lf1612_mannschaft4" size="1"
onChange="GruppenstaerkeBerechnen('truppmann','man nschaft4','lf1612')"><option
value="-">-</option>><option value="person1"
Quote:
Person1</option></select><br/></tf
td>Mannschaft: <select name="lf1612_mannschaft5" size="1"
onChange="GruppenstaerkeBerechnen('truppmann','man nschaft5','lf1612')"><option
value="-">-</option>><option value="person1"
Quote:
Person1</option></select><br/
Mannschaft: <select name="lf1612_mannschaft6" size="1"
onChange="GruppenstaerkeBerechnen('truppmann','man nschaft6','lf1612')"><option
value="-">-</option>><option value="person1"
Quote:
Person1</option></select><br/
Mannschaft: <select name="lf1612_mannschaft7" size="1"
onChange="GruppenstaerkeBerechnen('truppmann','man nschaft7','lf1612')"><option
value="-">-</option>><option value="person1"
Quote:
Person1</option></select></td></tr
/table
<table id="table1624" style="display:none;">
<tr><td colspan="3"><b>TLF16/24</b></td></tr>
<tr><td>Fahrzeugführer: <select name="tlf1624_fahrzeugfuehrer" size="1"
onChange="GruppenstaerkeBerechnen('truppmann','fah rzeugfuehrer','tlf1624')"><option
value="-">-</option>><option value="person1"
Quote:
Person1</option></select><br/
Mannschaft: <select name="tlf1624_gruppenfuehrer" size="1"
onChange="GruppenstaerkeBerechnen('gruppenfuehrer' ,'gruppenfuehrer','tlf1624')"><option
value="-">-</option>><option value="person1"
Quote:
Person1</option></select><br/
Mannschaft: <select name="tlf1624_mannschaft1" size="1"
onChange="GruppenstaerkeBerechnen('truppmann','man nschaft1','tlf1624')"><option
value="-">-</option>><option value="person1"
Quote:
Person1</option></select><br/></td></tr
/table
<table id="table1612TS" style="display:none;">
<tr><td colspan="3"><b>LF16-TS</b></td></tr>
<tr><td>Fahrzeugführer: <select name="lf16-ts_fahrzeugfuehrer"
size="1"><option value="-">-</option>><option value="person1"
Quote:
Person1</option></select><br/
Gruppenführer: <select name="lf16-ts_gruppenfuehrer" size="1"><option
value="-">-</option>><option value="person1"
Quote:
Person1</option></select><br/
Mannschaft: <select name="lf16-ts_mannschaft1" size="1"><option
value="-">-</option>><option value="person1"
Quote:
Person1</option></select><br/></td
td>Mannschaft: <select name="lf16-ts_mannschaft2" size="1"><option
value="-">-</option><option value="person1"
Quote:
Person1</option></select><br/
Mannschaft: <select name="lf16-ts_mannschaft3" size="1"><option
value="-">-</option>><option value="person1"
Quote:
Person1</option></select><br/
Mannschaft: <select name="lf16-ts_mannschaft4" size="1"><option
value="-">-</option>><option value="person1"
Quote:
Person1</option></select><br/></tf
td>Mannschaft: <select name="lf16-ts_mannschaft5" size="1"><option
value="-">-</option>><option value="person1"
Quote:
Person1</option></select><br/
Mannschaft: <select name="lf16-ts_mannschaft6" size="1"><option
value="-">-</option>><option value="person1"
Quote:
Person1</option></select><br/
Mannschaft: <select name="lf16-ts_mannschaft7" size="1"><option
value="-">-</option><option value="Achenbach, Marcel" >Achenbach,
Marcel</option><option value="Baar, Karsten" >Baar,
Karsten</option>><option value="person1"
Quote:
Person1</option></select></td></tr
/table
</table>
<table>
<tr><td id="IdLF1612">LF16/12:</td><td><input id="gruppenstaerke_lf1612"
name="lf1612" type="text" size="3" maxlength="3" value="0/0" /></td>
<td id="IdLF16TS">LF16/TS:</td><td><input name="lf16ts" type="text"
size="3" maxlength="3" value="1/8" /></td>
<td id="IdTLF1624">TLF16/24:</td><td><input id="gruppenstaerke_tlf1624"
name="tlf1624" type="text" size="3" maxlength="3" value="0/0"
/></td></tr>
</table>

und das steht in meiner js:

///////////////////////////////
// Globale Variablen //
/////////////////////////////

Besetzte_posten = new Array();
Besetzte_posten[0] = new Array();
Besetzte_posten[0]["fahrzeugfuehrer"] ="0";
for(var i=1;i<8;i++)
{
Besetzte_posten[0]["mannschaft"+i] ="0";
}


function GruppenstaerkeBerechnen(funktion,posten,fahrzeug)
{
//alert("Gruppenstärke wird berechnet");
var anzeige = document.getElementById('gruppenstaerke_'+fahrzeug ).value;
var Fuehrer_Mann = anzeige.split("/");
//alert(anzeige);
//alert(funktion);
//alert(posten);
if (funktion == 'gruppenfuehrer')
{
//alert("Ein Meister");
//alert(Fuehrer_Mann[0]);
var tmp = Fuehrer_Mann[0];
if(document.getElementById(fahrzeug+'_gruppenfuehr er').value == '-')
{
Fuehrer_Mann[0] = parseInt(tmp, 10) - 1;
document.getElementById('gruppenstaerke_'+fahrzeug ).value =
Fuehrer_Mann[0]+"/"+Fuehrer_Mann[1];
}
else
{
if(Fuehrer_Mann[0]>=1)
{
}
else
{
Fuehrer_Mann[0] = parseInt(tmp, 10) + 1;
//alert(Fuehrer_Mann[0]);
document.getElementById('gruppenstaerke_'+fahrzeug ).value =
Fuehrer_Mann[0]+"/"+Fuehrer_Mann[1];
}
}
}
else
{
//alert("Ein Mann");
//alert(Fuehrer_Mann[1]);
var tmp = Fuehrer_Mann[1];
if(document.getElementById(fahrzeug+'_'+posten).va lue == '-')
{
Fuehrer_Mann[1] = parseInt(tmp, 10) - 1;
document.getElementById('gruppenstaerke_'+fahrzeug ).value =
Fuehrer_Mann[0]+"/"+Fuehrer_Mann[1];
Besetzte_posten[0][posten]=0;
}
else
{
if(Besetzte_posten[0][posten]==0)
{
Fuehrer_Mann[1] = parseInt(tmp, 10) + 1;
//alert(Fuehrer_Mann[0]);
document.getElementById('gruppenstaerke_'+fahrzeug ).value =
Fuehrer_Mann[0]+"/"+Fuehrer_Mann[1];
Besetzte_posten[0][posten]=1;
}
else
{
}
}
}
}

In dem Array soll also festgehalten, ob der Platz in dem entsprechenden
Fahrzeug schon ausgewählt wurde, so dass bei einer Änderung der Person
nicht noch einmal gezählt wird.

Stefan



Reply With Quote
  #5  
Old   
PointedEars@web.de
 
Posts: n/a

Default Re: Array Zugriff - 12-06-2007 , 12:18 PM



Stefan Becker wrote:
Quote:
"Thomas 'PointedEars' Lahn" <PointedE... (AT) web (DOT) de> schrieb :

Das ist mein Webforumular:
[...]
Ich bin mir sicher, dass ich Dich in meiner Antwort nicht darum
gebeten hatte, hier Deinen unkommentierten Codemüll abzuladen. Ich
bin mir auch sicher, dass die http://dcljs.de/faq/ darum bittet, genau
das nicht zu tun.

Quote:
In dem Array soll also festgehalten, ob der Platz in dem entsprechenden
Fahrzeug schon ausgewählt wurde, so dass bei einer Änderung der Person
nicht noch einmal gezählt wird.
Wie schon gesagt, Du brauchst kein Array. Ansatz:

// oder: = new Object();
var o = {};
// ...
if (typeof o.foo != "undefined)
{
o.foo = "bar";
}

Das geht natürlich in diesem Fall auch mit der anderen
Eigenschaftszugriffssyntax:

if (typeof o["foo"] != "undefined)
{
o["foo"] = "bar";
}

oder

if (typeof o.foo != "undefined)
{
o["foo"] = "bar";
}

oder

if (typeof o["foo"] != "undefined)
{
o.foo = "bar";
}

und

delete o.foo;

oder

delete o["foo"];

Damit sollten alle Klarheiten restlos beseitigt sein.


PointedEars


Reply With Quote
  #6  
Old   
PointedEars@web.de
 
Posts: n/a

Default Re: Array Zugriff - 12-06-2007 , 12:30 PM



PointedE... (AT) web (DOT) de wrote:
Quote:
Stefan Becker wrote:
"Thomas 'PointedEars' Lahn" <PointedE... (AT) web (DOT) de> schrieb :

Das ist mein Webforumular:
[...]

Ich bin mir sicher, dass ich Dich in meiner Antwort nicht darum
gebeten hatte, hier Deinen unkommentierten Codemüll abzuladen. Ich
bin mir auch sicher, dass diehttp://dcljs.de/faq/darum bittet, genau
das nicht zu tun.
Internationalisierungsbedingter Fehlschuss. Die FAQ von
comp.lang.javascript enthält einen solchen Hinweis.

Für de.comp.lang.javascript findet man das auf http://dcljs.de/


PointedEars


Reply With Quote
  #7  
Old   
Stefan Becker
 
Posts: n/a

Default Re: Array Zugriff - 12-06-2007 , 03:48 PM




<PointedEars (AT) web (DOT) de> schrieb:

Quote:
Ich bin mir sicher, dass ich Dich in meiner Antwort nicht darum
gebeten hatte, hier Deinen unkommentierten Codemüll abzuladen. Ich
bin mir auch sicher, dass die http://dcljs.de/faq/ darum bittet, genau
das nicht zu tun.
Sorry, ich wollte nicht gegen eine Richtlinie verstoßen.

Ich habe das nun mal ausprobiert, aber an einer Stelle (wenn ich auf das
Objekt schreiben will) hakt dann alles.

besetzte_posten = new Object();
besetzte_posten = {};

delete besetzte_posten.fahrzeug+'_'+posten; // das klappt

if(typeof besetzte_posten.fahrzeug+'_'+posten != "undefined") // das
klappt auch
{
besetzte_posten.fahrzeug+'_'+posten = "bar"; // Kommt immer "Objekt
erwartet"
}

Stefan



Reply With Quote
  #8  
Old   
Thomas 'PointedEars' Lahn
 
Posts: n/a

Default Re: Array Zugriff - 12-06-2007 , 04:26 PM



Stefan Becker wrote:
Quote:
Ich habe das nun mal ausprobiert, aber an einer Stelle (wenn ich auf das
Objekt schreiben will) hakt dann alles.

besetzte_posten = new Object();
besetzte_posten = {};
Ich hatte die erste Zeile auskommentiert, um dies als eine alternative,
äquivalente Möglichkeit zu kennzeichnen. So wie Du es umgesetzt hast,
erzeugst Du unsinnigerweise zwei Object-Objekte und gibst das erste durch
Überschreiben der Referenz für die Müllabfuhr (Garbage Collection) frei.

Quote:
delete besetzte_posten.fahrzeug+'_'+posten; // das klappt
Es klappt insofern, als dass Du die fahrzeug-Eigenschaft des Objektes,
welches besetzte_posten referenziert, löschst (sofern vorhanden) und dann
das Ergebnis der delete-Operation mit anderen Werten zusammenfügst. Obiges
ist äquivalent zu

(delete besetzte_posten.fahrzeug) + '_' + posten;

und damit

"true_" + posten;

Quote:
if(typeof besetzte_posten.fahrzeug+'_'+posten != "undefined") // das
klappt auch
{
besetzte_posten.fahrzeug+'_'+posten = "bar"; // Kommt immer "Objekt
erwartet"
}
Du suchst

besetzte_posten["fahrzeug_" + posten]

und vor weiteren Fragen hier eine Sprachreferenz Deines geringsten
Misstrauens, um Dir einen Minimalclue anzulesen. Google ist Dein
Freund. [psf 6.1]


PointedEars


Reply With Quote
  #9  
Old   
Stefan Becker
 
Posts: n/a

Default Re: Array Zugriff - 12-11-2007 , 05:00 PM




"Thomas 'PointedEars' Lahn" <PointedEars (AT) web (DOT) de> schrieb:

Ich habe aber das Gefühl, dass es mit der Speicherung ein Problem gibt:

Besetzte_posten = {}; //global definiert

[..]
var tmp2 = fahrzeug+'_'+posten;
alert(tmp2);
[..]

if(document.getElementById(fahrzeug+'_'+posten).va lue == '-')
{
delete Besetzte_posten.tmp2;
alert("Objekt gelöscht");
}
else
{
if(typeof Besetzte_posten.tmp2 != undefined)
{
alert("Objekt noch nicht vorhanden");
Besetzte_posten.tmp2 = "bar";
alert("Objekt beschrieben");
[..]

Wenn ich nun das gleiche Objekt wieder auswähle, steigt er in den Zweig
wo das Objekt beschrieben werden soll. Aber ich habe das Objekt doch
global definiert, es müsste doch dann definiert sein.

Stefan


Reply With Quote
  #10  
Old   
Thomas 'PointedEars' Lahn
 
Posts: n/a

Default Re: Array Zugriff - 12-11-2007 , 05:37 PM



Stefan Becker wrote:
Quote:
"Thomas 'PointedEars' Lahn" <PointedEars (AT) web (DOT) de> schrieb:
Wenn Du schon den für den Leser hilfreichen Kontext weglässt, kannst Du
dann auch die Einleitungszeile weglassen, denn die nützt dann auch nichts mehr.

Bitte http://learn.to/quote nochmals lesen und nächstes Mal beherzigen, danke.

Quote:
[...]
Besetzte_posten = {}; //global definiert
Der Bezeichner steht nicht für einen Konstruktor, sollte also gängigen
Konventionen entsprechend nicht mit einem Grossbuchstaben beginnen.
Ausserdem fe lt das Schlüsselwort, damit es ein *Variablen*deklaration
wird (und keine blosse Eigenschaft oder im IE gar ein Laufzeitfelher):

var besetzte_posten = {};

Quote:
[...]
if(document.getElementById(fahrzeug+'_'+posten).va lue == '-')
Bitte keine Referenzwürmer, sondern ordentliche Feature-Tests:

http://PointedEars.de/scripts/test/whatami#inference

Quote:
[...]
if(typeof Besetzte_posten.tmp2 != undefined)
Die typeof-Operation hat als Ergebnis immer einen *String*:

if (typeof besetzte_posten.tmp2 != "undefined")

`undefined' ist hingegen der einzige Wert des Undefined-Typs (und jedenfalls
so nicht unversell verfügbar). Es gilt: "undefined" != undefined, daher
wird dieser Block nie ausgeführt.


PointedEars


Reply With Quote
Reply




Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off



Powered by vBulletin Version 3.5.4
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.