webentwicklung-frage-antwort-db.com.de

Wird die Javascript.map () - Funktion in IE8 unterstützt?

Wenn Sie dies tun:

var a = new Array("a", "b");
a.map(function() { });

in IE8 bekomme ich:

"Object doesn't support this property or method"

Wird diese Methode in IE8 nicht unterstützt oder habe ich ein anderes Problem? Ich hatte ein Google-Konto, aber viele JavaScript-Probleme/Fragen zu Google Maps ...

Bearbeiten: OK, also unterstützen IE8 und darunter NICHT die .map () - Funktion. Kopieren Sie den Code aus MDN hier , wodurch die .map () - Funktion genau nach den Spezifikationen zum Array-Prototyp hinzugefügt wird, sofern er nicht nativ unterstützt wird (und er scheint perfekt zu funktionieren).

35
Richard H

IE8 unterstützt map() nicht. Überprüfen Sie im Zweifelsfall MDN (Mozilla Developer Network):

karte - MDN

Es sieht so aus, als ob IE Unterstützung für map() in Version 9 hinzugefügt hat.

40
Justin Niessner

Die Lösung ist jQuery.map

Stattdessen: a.map(function( ) { });

Du musst

jQuery.map(a, function( ) { //what ever you want todo .. }

43
(function(fn){
    if (!fn.map) fn.map=function(f){var r=[];for(var i=0;i<this.length;i++)r.Push(f(this[i]));return r}
    if (!fn.filter) fn.filter=function(f){var r=[];for(var i=0;i<this.length;i++)if(f(this[i]))r.Push(this[i]);return r}
})(Array.prototype);

Platzieren Sie vor dem ersten Aufruf von .map oder .filter. Problem gelöst. Die jQuery.map () -Methode funktioniert nicht wie erwartet.

UPDATE: Ich habe es gerade mit spärlichen Arrays getestet: Wenn Map- oder Filterargument eine Funktion ist, die undefined-Wert akzeptiert und verarbeitet, funktioniert es, aber die Ergebnisse sind nicht offensichtlich:

Definieren wir ein Test-Sparse-Array:

var t = []
t[1] = 1; t[3] = 3; t[5] = 5;

Mal sehen, was IE8 über t sagt: "[undefined, 1, undefined, 3, undefined, 5]"

Lass es uns versuchen:

t.filter(function(x){return x<4})

Was ist das, IE8? Es ist: "[1, 3]" . Hinweis - keine undefinierten Werte. Das würde ich persönlich erwarten.

Aber versuche DIESES:

t.map(function(x){return 2<<x})

Und ... "[2, 4, 2, 16, 2, 64]" . Das ist komisch! :) Versuche dies:

t.map(function(x){return Math.pow(2,x)})

Und? ... "[NaN, 2, NaN, 8, NaN, 32]" - Ich würde dieses Ergebnis eher für den vorherigen Test erwarten. Es ist zumindest logisch - Math.pow () soll einen number-Typ NaN zurückgeben, unabhängig von seiner Bedeutung IS ein spezieller number-Typ, der für ungültige Operationen reserviert ist. Das Ergebnis ist also mehr oder weniger korrekt. Es wäre völlig korrekt als map Ergebnis, wenn t ein spärliches Array bleibt.

Also ohne weiteres - letztendlich korrekte Version der map- und filter-Methoden :

(function(fn){
    if (!fn.map) fn.map=function(f){var r=[];for(var i=0;i<this.length;i++)if(this[i]!==undefined)r[i]=f(this[i]);return r}
    if (!fn.filter) fn.filter=function(f){var r=[];for(var i=0;i<this.length;i++)if(this[i]!==undefined&&f(this[i]))r[i]=this[i];return r}
})(Array.prototype);

Und der Test:

var t = []; t[1] = 1; t[3] = 3; t[5] = 5;
var t1 = t.map(function(x){return 2<<x});
var t2 = t.filter(function(x){return x<10});
console.debug(t);
console.debug(t1);
console.debug(t2);

Erwartete Ergebnisse:

[object Array] [undefined, 1, undefined, 3, undefined, 5]

[object Array] [undefined, 4, undefined, 16, undefined, 64]

[object Array] [undefined, 1, undefined, 3, undefined, 5]

21
Harry

MDN sagt, dass IE 9 dies unterstützt. Keine Erwähnung von IE 8.

enter image description here

7
Vivin Paliath

Auf MSDN heißt es in Anforderungen für die Karte: Wird in den folgenden Dokumentmodi nicht unterstützt: Macken, Internet Explorer 6-Standard, Internet Explorer 7-Standard, Internet Explorer 8-Standard.

Map ist nur eine Implementierung des "Visitor" -Musters für ein Array. Ein einfacher Ersatz dafür könnte sein:

function visitArray(arr, visitor) {
    var result = [];

    for (var i = 0; i < arr.length; i ++) {
        result[i] = visitor(arr[i]);
    }

    return result;
}

Die Funktion benötigt auch array und function, die auf jedem Array-Element aufgerufen werden. Es gibt ein neues Array mit dem Ergebnis der Besucheraufforderung für jedes ursprüngliche Arrayelement zurück 

0
Alex Tsurika