JS: Array enthält merkwürde Elemente

  • Nabend!

    Nach diesem Beispiel versuche ich ein assoziatives Array auszulesen:
    http://www.infos24.de/javascripte/ha…s_arrays.htm#14

    Ich habe den folgenden Code 1:1 aus dem Beispiel übernommen:

    Wenn ich die Funktion über den Link aufrufe, bekomme ich nach den vier richtigen Inhalten des Arrays aber auch noch folgende:

    Zitat


    Der Name des Schlüssels ist copy Der dazugehörige Wert ist function (start, length) { start = start || 0; if (start < 0) { start = this.length + start; } length = length || this.length - start; var newArray = []; for (var i = 0; i < length; i++) { newArray[i] = this[start++]; } return newArray; }

    Zitat


    Der Name des Schlüssels ist remove Der dazugehörige Wert ist function (item) { var i = 0; var len = this.length; while (i < len) { if (this[i] === item) { this.splice(i, 1); len--; } else { i++; } } return this; }

    Zitat


    Der Name des Schlüssels ist contains Der dazugehörige Wert ist function (item, from) { return this.indexOf(item, from) != -1; }

    Zitat


    Der Name des Schlüssels ist associate Der dazugehörige Wert ist function (keys) { var obj = {}, length = Math.min(this.length, keys.length); for (var i = 0; i < length; i++) { obj[keys[i]] = this[i]; } return obj; }

    Zitat


    Der Name des Schlüssels ist extend Der dazugehörige Wert ist function (array) { for (var i = 0, j = array.length; i < j; i++) { this.push(array[i]); } return this; }

    Zitat


    Der Name des Schlüssels ist merge Der dazugehörige Wert ist function (array) { for (var i = 0, l = array.length; i < l; i++) { this.include(array[i]); } return this; }

    Zitat


    Der Name des Schlüssels ist include Der dazugehörige Wert ist function (item) { if (!this.contains(item)) { this.push(item); } return this; }

    Zitat


    Der Name des Schlüssels ist getRandom Der dazugehörige Wert ist function () { return this[$random(0, this.length - 1)] || null; }

    Zitat


    Der Name des Schlüssels ist getLast Der dazugehörige Wert ist function () { return this[this.length - 1] || null; }

    Zitat


    Der Name des Schlüssels ist each Der dazugehörige Wert ist function forEach() { [native code] }

    Zitat


    Der Name des Schlüssels ist test Der dazugehörige Wert ist function (item, from) { return this.indexOf(item, from) != -1; }

    Zitat


    Der Name des Schlüssels ist rgbToHex Der dazugehörige Wert ist function (array) { if (this.length < 3) { return false; } if (this.length == 4 && this[3] == 0 && !array) { return "transparent"; } var hex = []; for (var i = 0; i < 3; i++) { var bit = (this[i] - 0).toString(16); hex.push(bit.length == 1 ? "0" + bit : bit); } return array ? hex : "#" + hex.join(""); }

    Zitat


    Der Name des Schlüssels ist hexToRgb Der dazugehörige Wert ist function (array) { if (this.length != 3) { return false; } var rgb = []; for (var i = 0; i < 3; i++) { rgb.push(parseInt(this[i].length == 1 ? this[i] + this[i] : this[i], 16)); } return array ? rgb : "rgb(" + rgb.join(",") + ")"; }

    Zitat


    Der Name des Schlüssels ist rgbToHsb Der dazugehörige Wert ist function () { var red = this[0], green = this[1], blue = this[2]; var hue, saturation, brightness; var max = Math.max(red, green, blue), min = Math.min(red, green, blue); var delta = max - min; brightness = max / 255; saturation = max != 0 ? delta / max : 0; if (saturation == 0) { hue = 0; } else { var rr = (max - red) / delta; var gr = (max - green) / delta; var br = (max - blue) / delta; if (red == max) { hue = br - gr; } else if (green == max) { hue = 2 + rr - br; } else { hue = 4 + gr - rr; } hue /= 6; if (hue < 0) { hue++; } } return [Math.round(hue * 360), Math.round(saturation * 100), Math.round(brightness * 100)]; }

    Zitat


    Der Name des Schlüssels ist hsbToRgb Der dazugehörige Wert ist function () { var br = Math.round(this[2] / 100 * 255); if (this[1] == 0) { return [br, br, br]; } else { var hue = this[0] % 360; var f = hue % 60; var p = Math.round(this[2] * (100 - this[1]) / 10000 * 255); var q = Math.round(this[2] * (6000 - this[1] * f) / 600000 * 255); var t = Math.round(this[2] * (6000 - this[1] * (60 - f)) / 600000 * 255); switch (Math.floor(hue / 60)) { case 0: return [br, t, p]; case 1: return [q, br, p]; case 2: return [p, br, t]; case 3: return [p, q, br]; case 4: return [t, p, br]; case 5: return [br, p, q]; default:; } } return false; }

    Kann mir das mal wer erklären? o.0

  • Also ich hab sowas auch noch nie gesehen, bei mir kommen aber stets die richtigen antworten(ergebnisse)
    hast du WIRKLICH NICHTS am code geändert??
    ich mein ich find schon komisch, daß javascript des mit dem "for i in array"
    hinbekommt, also daß des anhand der einträge im array erkennt, daß

    Code
    i=0; i<array.length; i++

    ist...
    hab mir des von deinem link mal durchgelsen, is ne echt fette sache, daß javascript des so macht ;)
    aber weshalb diese fehlermeldungen bei dir kommen, ist eher ein bömisches dorf für mich.
    schreib dem typen, der des da auf seiner site erklärt doch mal ne mail, er scheint ja echt was drauf zu haben...

    ach und christopher, würdest du den text lesen, der bei der velinkten seite über dem übernommenen script steht, hätteste die frage nicht stellen brauchen.
    ein assoziatives array kennt seinen index und seine größe nicht auf die art und weise, wie ein normales array!

  • Also das Ding ist, das es in Javascript angeblich keine assoziativen Arrays gibt. Dafür gibt es in Javascript Objekte und Eigenschaften. Irgentwo hab ich gestern noch gelesen, das man einfach anstelle eines Arrays ein Object erstellen soll.

    Diese Spezielle for-Schleife wird auf verschiedenen Seiten ja auch immer mit folgender Syntax beschrieben:

    Code
    for (var in Obj)


    von daher kann man wohl davon ausgehen, dass das auch nur mit Objects funktioniert...
    Ich tüftel erstmal weiter.

  • Ich versuche gerade (ohne Tutorial :P) eine Live-Suche mit Ajax unter Verwendung von Mootools zu programmieren.
    Das Array bzw. Objekt enthält die Parameter die an das PHP-Script übergeben werden.
    Die Parameter werden an den Dateinamen angehangen und im Script per $_GET verarbeitet und an einen MySQL-Query angehengt.

    index.html:

    result.php

    PHP
    <?php
    if (isset($_GET["geschlecht"]) AND $_GET["geschlecht"] != "false") {
    	echo "Geschlecht: ".$_GET["geschlecht"]."
    ";
    }
    if (isset($_GET["alter"]) AND $_GET["alter"] != "false") {
    	echo "Alter: ".$_GET["alter"]."
    ";
    }
    ?>

    Bisher werden die Parameter einfach wieder ausgegeben. Die Datenbank abfrage mach ich gerade.