35 votes

La fonction javascript .map () est-elle prise en charge dans IE8?

Quand vous faites cela:

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

dans IE8 j'obtiens:

"Object doesn't support this property or method"

Cette méthode est-elle pas prise en charge dans IE8, ou dois-je avoir un autre problème? J'ai eu un Google, mais d'obtenir beaucoup de Google Maps javascript problèmes/questions...

Edit: OK, donc IE8 et ci-dessous NE prennent PAS en charge les .map() fonction. Copier-coller le code du MDN ici à ajouter l' .map() de la fonction de la Matrice de prototype exactement selon les spécifications si pas pris en charge nativement (et il semble fonctionner parfaitement).

43voto

Interactive Tribe Points 239

La solution est jQuery.map

Au lieu de cela: a.map(function( ) { });

Tu dois faire

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

40voto

Justin Niessner Points 144953

IE8 ne prend pas en charge map() . En cas de doute, vérifiez MDN (Mozilla Developer Network):

carte - MDN

Il semble que IE ait ajouté la prise en charge de map() dans la version 9.

21voto

Harry Points 573
(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);

Le mettre n'importe où avant première .carte ou .filtre d'appel. Le problème est résolu. jQuery.méthode map() ne fonctionne pas comme prévu.

Mise à JOUR: Je viens de le tester sur des matrices creuses: si la carte ou le filtre argument est une fonction qui accepte et gère undefined de la valeur qu'il fonctionne, mais les résultats ne sont pas évidents:

Nous allons définir un test tableau fragmenté:

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

Voyons ce que ne IE8 dire à propos de t: "[undefined, 1, undefined, 3, undefined, 5]"

Essayons:

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

Qu'est-ce que c', IE8? C'est: "[1, 3]". Remarque - pas de valeur définie. Je serais personnellement s'attendre à ce que.

Mais essayez CECI:

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

Et... "[2, 4, 2, 16, 2, 64]". C'est bizarre! :) Essayez ceci:

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

Et?... "[NaN, 2, NaN, 8, NaN, 32]" - je préfère attendre ce résultat pour le test précédent. C'est au moins logique - Mathématiques.pow() est censé renvoyer un number type NaN, quelle que soit sa signification spéciale à l' number type réservés pour des opérations non valides. Donc le résultat est plus ou moins correct. Il serait tout à fait correcte comme map résultat si t est resté un tableau fragmenté.

Alors sans plus tarder - en fin de compte version correcte de l' map et filter méthodes:

(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);

Et le 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);

Résultats attendus:

[Tableau d'objet] [undefined, 1, undefined, 3, undefined, 5]

[Tableau d'objet][undefined, 4, undefined, 16, undefined, 64]

[Tableau d'objet][undefined, 1, undefined, 3, undefined, 5]

7voto

Vivin Paliath Points 40975

MDN dit que IE 9 le prend en charge. Aucune mention d'IE 8.

entrez la description de l'image ici

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X