HighDots Forums  

mehrdimensionale Arrays und unterschiedliche Variablentypen

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


Discuss mehrdimensionale Arrays und unterschiedliche Variablentypen in the Javascript (German) forum.



Reply
 
Thread Tools Display Modes
  #1  
Old   
Harald Lathwesen
 
Posts: n/a

Default mehrdimensionale Arrays und unterschiedliche Variablentypen - 10-04-2007 , 11:04 AM






Hallo,
ich stehe gerade voll auf dem Schlauch.

Es soll ein zweidimensionales Array gebildet werden:

Wert(String) Wert(Zahl)
Wert(Zahl)
Wert(String) Wert(Zahl)
Wert(Zahl)

String ist z.B. '4.10.07 14:00:00'
Zahl ist z.B. '672.32' oder '83.08'

Den Anfang bekomme ich noch hin:

var Wert = new Array(216)
//die zweite Dimension
for (i = 0; i<216; ++i) {
Wert[i] = new Array(2)
}

Dann die Werte zuweisen

i=0
Wert[i] = mdata1[0] //'4.10.07 14:00:00'
Wert[i][0] = aw_round(mdata1[1]/AnlagenKWPx[0]) //'83.08'
Wert[i][1] = aw_round(mdata2[1]/AnlagenKWPx[1]) //'672.32'
document.write(Wert[i]+" - "+Wert[i][0]+" - "+Wert[i][1]+"<br>")

Als Ergebniss bekomme ich aber:

04.10.07 14:00:00 - undefined - undefined

Wo liegt mein Gedankenfehler?

Vielen Dank für die Aufklärung
Harald

--
Antworten nur in der NG. Bei PM nur an hlcsb at web punkt de
Alles andere wird ungesehen gelöscht.

Reply With Quote
  #2  
Old   
Armin
 
Posts: n/a

Default Re: mehrdimensionale Arrays und unterschiedliche Variablentypen - 10-04-2007 , 11:18 AM






On 4 Okt., 17:04, Harald Lathwesen <news.
5.das399ig... (AT) spamgourmet (DOT) com> wrote:
Quote:
Hallo,
ich stehe gerade voll auf dem Schlauch.

Es soll ein zweidimensionales Array gebildet werden:

Wert(String) Wert(Zahl)
Wert(Zahl)
Wert(String) Wert(Zahl)
Wert(Zahl)

String ist z.B. '4.10.07 14:00:00'
Zahl ist z.B. '672.32' oder '83.08'

Den Anfang bekomme ich noch hin:

var Wert = new Array(216)
//die zweite Dimension
for (i = 0; i<216; ++i) {
Wert[i] = new Array(2)

}

Dann die Werte zuweisen

i=0
Wert[i] = mdata1[0] //'4.10.07 14:00:00'
Wert[i][0] = aw_round(mdata1[1]/AnlagenKWPx[0]) //'83.08'
Wert[i][1] = aw_round(mdata2[1]/AnlagenKWPx[1]) //'672.32'
document.write(Wert[i]+" - "+Wert[i][0]+" - "+Wert[i][1]+"<br>")

Als Ergebniss bekomme ich aber:

04.10.07 14:00:00 - undefined - undefined

Wo liegt mein Gedankenfehler?

Vielen Dank für die Aufklärung
Harald

--
Antworten nur in der NG. Bei PM nur an hlcsb at web punkt de
Alles andere wird ungesehen gelöscht.
Hallo,
Du braucht eine "Sub"_Array von der Größe 3.

-- Wert[i] = new Array(3)

es müssen dan alle drei Werte zugewiesen werden:
-- Wert[i][0] = mdata1[0] //'4.10.07 14:00:00'
-- Wert[i][1] = aw_round(mdata1[1]/AnlagenKWPx[0]) //'83.08'
-- Wert[i][2] = aw_round(mdata2[1]/AnlagenKWPx[1]) //'672.32'
-- document.write(Wert[i][0]+" - "+Wert[i][1]+" - "+Wert[i]
[2]+"<br>")

Gruß Armin



Reply With Quote
  #3  
Old   
Harald Lathwesen
 
Posts: n/a

Default Re: mehrdimensionale Arrays und unterschiedliche Variablentypen - 10-04-2007 , 11:33 AM



Armin schrieb:


Quote:
Hallo,
Du braucht eine "Sub"_Array von der Größe 3.

-- Wert[i] = new Array(3)

es müssen dan alle drei Werte zugewiesen werden:
-- Wert[i][0] = mdata1[0] //'4.10.07 14:00:00'
-- Wert[i][1] = aw_round(mdata1[1]/AnlagenKWPx[0]) //'83.08'
-- Wert[i][2] = aw_round(mdata2[1]/AnlagenKWPx[1]) //'672.32'
-- document.write(Wert[i][0]+" - "+Wert[i][1]+" - "+Wert[i]
[2]+"<br>")

Gruß Armin

Danke Armin,
oh man
das Leben ist so einfach das man es manchmal einfach nicht glauben kann.

Gruß
Harald

--
Antworten nur in der NG. Bei PM nur an hlcsb at web punkt de
Alles andere wird ungesehen gelöscht.


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

Default Re: mehrdimensionale Arrays und unterschiedliche Variablentypen - 10-04-2007 , 11:59 AM



Harald Lathwesen wrote:
Quote:
ich stehe gerade voll auf dem Schlauch.

Es soll ein zweidimensionales Array gebildet werden:

Wert(String) Wert(Zahl)
Wert(Zahl)
Wert(String) Wert(Zahl)
Wert(Zahl)

String ist z.B. '4.10.07 14:00:00'
Zahl ist z.B. '672.32' oder '83.08'
Eine Zahl wäre es nur ohne Quotes.

Quote:
Den Anfang bekomme ich noch hin:

var Wert = new Array(216)
Im schlimmsten Fall erzeugt das ein Array mit dem Wert 216 als einzigem
Element; im besten Fall ein Array-Objekt a mit a.length == 216, wobei der
Zugriff auf jede beliebige numerische Eigenschaft trotzdem `undefined'
ergibt. Nicht machen.

Ausserdem sollte der Variablenbezeichner nicht mit einem Grossbuchstaben
beginnen, da er keinen Konstruktor referenziert.

Quote:
//die zweite Dimension
for (i = 0; i<216; ++i) {
`i' sollte deklariert werden. Bei 0-basierten Schleifen ist zudem

for (var i = grosseZahl; i--

effizienter, wenn es nicht auf die Reihenfolge ankommt (so wie hier, aber
hier braucht man gar keine Schleife, s.u.)

Quote:
Wert[i] = new Array(2)
Siehe oben.

Quote:
}
Die Initialisierung ist völlig unnötig. ECMAScript-Arrays haben eine
dynamische Länge. Genaugenommen verändert das Hinzufügen eines Elements
mit einem (numerischen) Index lediglich den Elementwert und die
length-Eigenschaft des Array-Objekts:

var a = new Array();
// a.length === 0

a[4] = "bar";
// a.length === 5

// alle Eigenschaftsnamen sind intern Strings, daher funktioniert das auch
a["12"] = "bar";

// a.length === 13
// a[3] === undefined

Quote:
Dann die Werte zuweisen

i=0
Wert[i] = mdata1[0] //'4.10.07 14:00:00'
Hier überschreibst Du das erste Element des "äusseren" Arrays. Somit wird
ab hier mit Wert[0] bzw. (hier) Wert[i] nicht mehr das zuvor erzeugte
"innere" Array-Objekt referenziert, sondern (vermutlich) ein String-Wert
(die von Dir gezeigte Darstellung könnte auch nur eine String-Repräsentation
eines Wertes sein). Ein String-Wert wird bei Eigenschaftszugriffen wie ein
String-Objekt behandelt.

Das nun nicht mehr referenzierte Array-Objekt wird früher oder später der
Garbage Collection zum Opfer fallen.

Quote:
Wert[i][0] = aw_round(mdata1[1]/AnlagenKWPx[0]) //'83.08'
Wert[i][1] = aw_round(mdata2[1]/AnlagenKWPx[1]) //'672.32'
Du kannst zwar jedem Objekt numerische Eigenschaften hinzuzufügen versuchen,
jedoch hängt der Erfolg und auch der spätere Lesezugriff auf diese
Eigenschaften von der Art des Objekts ab (natives oder Host-Objekt; wenn
nativ, eingebaut oder benutzerdefiniert).

Du versuchst hier, mdata1[0][0] und mdata1[0][1] zu überschreiben bzw. dem
mit mdata[0] referenzierten Objekt die Eigenschaften "0" und "1"
hinzuzufügen. Das kann klappen, muss es aber nicht (wie mdata1 aussieht,
hast Du verschwiegen).

Quote:
document.write(Wert[i]+" - "+Wert[i][0]+" - "+Wert[i][1]+"<br>")

Als Ergebniss
-- mit nur einem "s" --

Quote:
bekomme ich aber:

04.10.07 14:00:00 - undefined - undefined
Eben.

Quote:
Wo liegt mein Gedankenfehler?
Siehe oben. Du suchst möglicherweise stattdessen:

var wert = new Array(
new Array(
aw_round(mdata1[1]/AnlagenKWPx[0]),
aw_round(mdata2[1]/AnlagenKWPx[1])
)
);

Seit JavaScript 1.3 (NN 4.06, 1998), JScript 2.0 (Windows NT 4/IE 3.0,
1997-10) und ECMAScript Ed. 3 (Opera 6 u.a., 1999-12) ist ausserdem die
Literalsyntax möglich:

var wert = [
[
aw_round(mdata1[1]/AnlagenKWPx[0]),
aw_round(mdata2[1]/AnlagenKWPx[1])
]
];


PointedEars
--
Die Bereitschaft fühlender Wesen, Deinen Code näher anzuschauen, liegt wohl
selbst auf logarithmischen Skalen unter Null (das geht genau dann, wenn der
Leidensdruck dieser Wesen beim Anschauen größer wird als die mathematische
Notwendigkeit für Werte größer Null). -- Dietmar Meier in dcljs


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

Default Re: mehrdimensionale Arrays und unterschiedliche Variablentypen - 10-04-2007 , 12:11 PM



Armin wrote:
Quote:
On 4 Okt., 17:04, Harald Lathwesen <news.
Antworten nur in der NG. Bei PM nur an hlcsb at web punkt de
Alles andere wird ungesehen gelöscht.
Mift, die Laubsägebastelanleitung hatte ich ganz übersehen. Score adjusted.

http://www.kirchwitz.de/~amk/dni/netiquette, 9., 11. und 13.
http://www.gerlo.de/falsche-email-adressen.html

Quote:
[...] Du braucht eine "Sub"_Array von der Größe 3.
Diese kühne Vermutung von Dir, was der OP bräuchte, traf hier zufällig zu.

Quote:
-- Wert[i] = new Array(3)
Wie schon erklärt ist die Initialisierung unnötiger Unfug. Dieser hat nur
in diesem Fall keine negativen Folgen, weil Wert[i][0] im Anschluss gleich
wieder überschrieben und Wert[i].length nicht ausgewertet wird:

Quote:
Wert[i][0] = mdata1[0] //'4.10.07 14:00:00'
Es muss oben lediglich das Array-Objekt erzeugt und die Referenz zugewiesen
werden, damit

Quote:
Wert[i][2] = aw_round(mdata2[1]/AnlagenKWPx[1]) //'672.32'
funktioniert:

Wert[i] = new Array();


PointedEars
--
ich benutze den Befehl BOQuery, um Daten aus meiner Datenbank zu lesen.
Dieser funktioniert im IE 6 auch meistens. Aber auf manchen Rechnern bei
uns in der Firma funktioniert er nicht. [...] Was muß ich installieren?
(Reiner Wahnsiedler in dcljs <ardkdn$d0q$07$1 (AT) news (DOT) t-online.com>)


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.