pepebe: Eigenartiges Verhalten beim Verknüpfen von Text und Rechnung

Guten Abend Java Script liebe Weisen.

Habe mal wieder eine Codeblockade...

Ich möchte ein Array mit Koordinaten in einer Tabelle vom Muster Pos.x.y füllen...

Zuerst isoliere ich die x-Koordinate und y-Koordinate:
Pos = "Pos.3.3";
PositionSplit = Pos.split(".");
var x = PositionSplit[1];
var y = PositionSplit[2];

So weit so gut...

Wenn ich nun das Array nach folgendem Muster erstelle:
CompassPos = new Array (
"Pos."+(x)  +"."+(y-1),
"Pos."+(x+1)+"."+(y-1),
"Pos."+(x+1)+"."+(y),
"Pos."+(x+1)+"."+(y+1),
"Pos."+(x)  +"."+(y+1),
"Pos."+(x-1)+"."+(y+1),
"Pos."+(x-1)+"."+(y),
"Pos."+(x-1)+"."+(y-1)
)

Erhalte ich als Ergebnis:
Pos.3.2, (was erwünscht ist...)
Pos.31.2, (was nicht erwünscht ist, denn die X Koordinate wird als Textstring behandelt an die wegen des "+" eine 1 angehängt wird...)
Pos.31.3, (dito)
Pos.31.31,(dito)
Pos.3.31,(dito)
Pos.2.31,(dito)
Pos.2.3,(mit "-" funktioniert die Sache wieder...)
Pos.2.2 (dito)

Ich muß gestehen, daß ich etwas verwirrt bin.

Wo liegt mein Irrtum?

  1. Hallo pepebe.

    Ich muß gestehen, daß ich etwas verwirrt bin.

    Wo liegt mein Irrtum?

    Suchst du parseInt() ?

    Einen schönen Donnerstag noch.

    Gruß, Ashura

    --
    Selfcode: sh:( fo:} ch:? rl:( br: n4:~ ie:{ mo:| va:) de:> zu:) fl:( ss:) ls:[ js:|
    30 Days to becoming an Opera8 Lover -- Day 21: Toolbars
    Meine Browser: Opera 8.01 | Firefox 1.0.6 | Lynx 2.8.5 | Netscape 4.7 | IE 6.0
    [Deshalb frei! - Argumente pro freie Software]
  2. Pos = "Pos.3.3";
    PositionSplit = Pos.split(".");
    var x = PositionSplit[1];
    var y = PositionSplit[2];

    Ich unterstelle, daß x und y nun Strings sind.

    "Pos."+(x)  +"."+(y-1),

    Für + kann Stringverknüpfung angenommen werden, für - nur der Rechenweg.

    Wo liegt mein Irrtum?

    Wandle x und y bei Zuweisung schon in Zahlen um.

  3. Vielen Dank für die blitzschnelle Antwort sschuman und Ashura. Ich teile eure Meinung und denke auch, daß parseInt in die richtige Richtung weist.

    Habe es deshalb mit parseInt() versucht. Das Verhalten ändert sich leider nicht.

    Bsp.
    x = 3;
    y = 3;
    Pos = "Pos."+parseInt(x+1)+"."+(y-1);

    sollte ergeben: "Pos.4.2"
    ergibt jedoch: "Pos.31.2"

    Ich habe folgendes versucht:
    Pos = "Pos."+(x(-1*-1))+"."+(y-1);

    Das funktioniert auch, aber ich habe Bauchschmerzen, wenn ich auch nur daran denke, jemand könnte das lesen...

    1. Hallo,

      Habe es deshalb mit parseInt() versucht. Das Verhalten ändert sich leider nicht.

      Bsp.
      x = 3;
      y = 3;
      Pos = "Pos."+parseInt(x+1)+"."+(y-1);

      Oha - da hast du das parseInt() einen Schritt zu spät angewendet: Erst wird der Ausdruck x+1 berechnet, anscheinend noch als String. Danach wird parseInt() auf das Ergebnis losgelassen.

      Versuch's besser mal mit

      Pos = "Pos."+(parseInt(x)+1)+"."+(y-1);

      Sollte imho eindeutiger sein, und Bauchschmerzen gibt's auch keine...

      So long,

      Martin

      1. thx Martin, das scheint in die richtige Richtung zu gehen!!!