(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);
Mettere da parte prima della prima chiamata .map o .filter. Problema risolto. Il metodo jQuery.map() non funziona come previsto.
UPDATE: ho appena testato su array sparsi: se la mappa o argomento di filtro è una funzione che accetta e gestisce undefined
valore - funziona, ma i risultati non sono evidenti:
Definiamo Test matrice sparsa:
var t = []
t[1] = 1; t[3] = 3; t[5] = 5;
Vediamo che cosa dicono di IE8 t: "[indefinito, 1, non definito, 3, indefinita, 5]"
Proviamo:
t.filter(function(x){return x<4})
Che cosa c'è, IE8? È: "[1, 3]". Nota: nessun valore indefinito. Lo aspetterei personalmente.
Ma provate questo:
t.map(function(x){return 2<<x})
E ... "[2, 4, 2, 16, 2, 64]". Quello è strano!:) Prova questo:?
t.map(function(x){return Math.pow(2,x)})
E ... "[NaN, 2, NaN, 8, NaN, 32]" - Preferirei aspettare questo risultato del test precedente. È almeno logico: Math.pow() dovrebbe restituire un tipo number
, NaN
, indipendentemente dal significato È un tipo speciale number
riservato per operazioni non valide. Quindi il risultato è più o meno corretto. Sarebbe completamente corretto come risultato map
se t rimanesse un array sparse.
Quindi, senza ulteriori indugi - ultima analisi corretta versione di map
e filter
metodi:
(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);
e il 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);
Risultati attesi:
[oggetto Array ] [indefinito, 1, indefinito, 3, indefinito, 5]
[oggetto Array] [indefinito, 4, indefinito, 16, indefinito, 64]
[oggetto Array] [indefinito, 1, indefinito, 3, indefinito, 5]
sì ... non supportato .. –