Robbe: Problem beim vergleichen von String-Werten

Hallo,

Ich habe eine Funktion die ein zweidimensionales Array mit einer for-schleife durchläuft. Zwei String-Werte besitzt die Funktion als Eingabe, diese werden auch ordnungsgemäß übergeben. Die Funktion prüft nun ob var1 == array[i][0] WENN ja prüft sie weiterhin ob var2 == array[i][1] ... WENN beide ausdrücke übereinstimmen liefert die Funktion nur i zurück. Das Problem liegt darin das er nur den ersten Wert (var1) richtig vergleicht, bei der Prüfung var2 == array[i][1] geht das Proggy einfach nicht in diesen Zweig obwohl lt. Ausgabe mit alert(); die Strings 100% gleich sind.

Hat da jmd. ne idee wo der Fehler liegen könnte?

mfg, Robin.

  1. Hat da jmd. ne idee wo der Fehler liegen könnte?

    Da Du nur schreibst, was passieren sollte, aber keinen Code beilegst, aus dem ersichtlich wird, was passiert, ist Dir auch nicht zu helfen.

    1. Also codemässig sieht das bei mir so aus...

      Ein Array-eintrag hat folgende deklaration:

      formats[0] = new Array('Product 001', 'Modell Blabla', '42 x 42 mm', '55', '75');

      function get_stkkst(var1, var2)
      {
       for(i=0; i <= formats.length-1; i++)
       {
        if(var1.indexOf(formats[i][0]) != -1) if (var2.indexOf(formats[i][1]) != -1) return i; }
       }
      }

      kst_prodid = get_stkkst(stk_type, stk_format);

      Also wiegesagt, richtig finden würde er stk_type. Bei var2 streubt er sich :(

      1. if(var1.indexOf(formats[i][0]) != -1) if (var2.indexOf(formats[i][1]) != -1) return i; }

        Ob's wohl an dem Syntaxfehler liegt?

        1. Nein!

          Sorry das is nur beim kopieren passiert. DU meinst sicher diese letzte geschw. Klammer.

          Ich schätze eher das liegt an den Datentypen ... aber wie kann ich sowas überprüfen??

          cya, Robin.

          1. Ich schätze eher das liegt an den Datentypen

            Ich weiß echt nicht, was Du willst. Läuft doch:

            formats = new Array();
            formats[0] = new Array('Product 001', 'Modell Blabla', '42 x 42 mm', '55', '75');

            function get_stkkst(var1, var2)
            {
             for(i=0; i <= formats.length-1; i++)
             {
              if(var1.indexOf(formats[i][0]) != -1) if (var2.indexOf(formats[i][1]) != -1) return i;
             }
            }

            kst_prodid = get_stkkst("Product 001", "Modell Blabla");
            alert(kst_prodid);

            1. Ja, stümmt, beim 0-ten Feld schon, aber versuch mal das Array zu erweitern!

              mit z.b.

              formats[1] = new Array('Product 002', 'Modell Blabla2', '54 x 54 mm', '65', '95');
              formats[2] = new Array('Product 003', 'Modell Blabla3', '84 x 84 mm', '85', '135');

              und dann suche z.b. nach dem 2ten oder 3ten... bei funktioniert das leider nicht mehr beim ersten komischerweise schon...

              1. Ja, stümmt, beim 0-ten Feld schon, aber versuch mal das Array zu erweitern!

                Auch das klappt.

                formats = new Array();
                formats[0] = new Array('Product 001', 'Modell Blabla', '42 x 42 mm', '55', '75');
                formats[1] = new Array('Product 002', 'Modell Blabla2', '54 x 54 mm', '65', '95');
                formats[2] = new Array('Product 003', 'Modell Blabla3', '84 x 84 mm', '85', '135');

                function get_stkkst(var1, var2)
                {
                 for(i=0; i <= formats.length-1; i++)
                 {
                  if(var1.indexOf(formats[i][0]) != -1) if (var2.indexOf(formats[i][1]) != -1) return i;
                 }
                }

                kst_prodid = get_stkkst("Product 002", "Modell Blabla2");
                alert(kst_prodid);

                1. Hallo nocheinmal :P,

                  Also der Fehler lag schlicht und ergreifend am den Strings in dem Array formats... die kommen aus ner Datenbank und hatten dummerweise ein geschütztes leerzeichen (mit alt + 255)... damit isses klar das er das nich finden konnte. Mist sowas muss auch imma mir passieren :P ... ich danke euch nochmal für eure hülfe :)

                  cya, Robin.

      2. formats[0] = new Array('Product 001', 'Modell Blabla', '42 x 42 mm', '55', '75');

        Schöner, weil besser lesbar ist sowas als Objekt zu erzeugen.

        function setObj(type, beschreibung, format, zahl1, zahl2)'
        {
        this.type = type;
        this.beschreibung = beschreibung;
        this.format = format;
        this.zahl1 = zahl1;
        this.zahl2 = zahl2;
        }

        formats[formats.length] = new setObj('Product 001', 'Modell Blabla', '42 x 42 mm', '55', '75');

        Dann musst du später nicht auf den Index zugreifen, sondern kannst das Attribut bezeichnen.

        function get_stkkst(var1, var2)
        {
        for(i=0; i <= formats.length-1; i++)

        Du meinst:

        for(var i = 0; i < formats.length; i++)

        {
          if(var1.indexOf(formats[i][0]) != -1) if (var2.indexOf(formats[i][1]) != -1) return i; }

        Du meinst:
        if( var1.indexOf(formats[i][0]) != -1 && var2.indexOf(formats[i][1]) != -1 ) return i;

        Und mit dem obigen Objekt:

        if( var1.indexOf(formats[i].type) != -1 &&
        var2.indexOf(formats[i].beschreibung) != -1 ) return i;

        oder noch besser gleich eine Vergleichsfunktion einbauen:

        setObj.prototype.compare(type, format)
        {
        return ( type.indexOf(this.type) != -1 &&
        format.indexOf(this.beschreibung) != -1 );
        }

        und dann:

        for(var i = 0; i < formats.length; i++)
        if( formats[i].compare(var1, var2) ) return i;

        }
        }

        kst_prodid = get_stkkst(stk_type, stk_format);

        Ich frag mich aber, warum du das Format mit der Beschreibung vergleichst.

        Struppi.

        1. Yooo also danke für die zahlreichen Tipps Struppi. Leider liegt das Problem an etwas was ich hoffentlich gleich rausfinde :P... Mein Problem ist das das Format falsch vergleichen bzw. nicht in dem String auffindbar ist. Beide werden mit alert(); identisch ausgeben aber die Prüfung scheitert... Sobald ichs rausgefunden hab mach ich nochmal einen Post.

          cya, Robbe.