(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]