La diferencia entre JS forEach nativo y el recorrido de mapas y los métodos de escritura compatibles
1. Recorrido nativo de JS forEach() y map()
***Mismos puntos:
1.
2. Cada función anónima ejecutada en forEach() y map() admite 3 parámetros: el elemento actual en la matriz, el índice del elemento actual y la entrada de la matriz original.
3. Esto en funciones anónimas se refiere a Window.
4. Sólo se pueden atravesar matrices.
1.forEach()
Sin valor de retorno.
;
var res = ary.forEach(función (elemento,índice,entrada) {
entrada[índice] = elemento*10;
})
console.log(res);//-->undefinido;
console.log(ary);//-->reemplazará el original La matriz cambia;
2.map()
tiene un valor de retorno y se puede devolver.
;
var res = ary.map(función (elemento,índice,entrada) {
devolver elemento*10;
})
console.log(res);//-->;
console.log(ary);//-->;
Compatible Método de escritura:
Tanto forEach como map no son compatibles en IE6-8 (en caso de incompatibilidad, no hay dos métodos en Array.prototype), entonces necesitamos encapsular un método que sea compatible con nosotros mismos. , el código es el siguiente:
[javascript] ver copia simple
/**
* forEach atraviesa la matriz
* @param callback [función] función de devolución de llamada;
* @param contexto [objeto] contexto;
*/
Array.prototype.myForEach = función myForEach(callback,context) {
contexto = contexto || ventana;
if('forEach' en Array.prototye) {
this.forEach (devolución de llamada, contexto);
return;
}
//Escribe tu propia lógica de ejecución de función de devolución de llamada en IE6-8
for(var i = 0, len = this.length; i < len;i++) {
devolución de llamada && callback.call(context,this[i],i,this);
}
}
[javascript] ver copia simple
/**
* el mapa atraviesa la matriz
* @param devolución de llamada [función] función de devolución de llamada;
* @param contexto [objeto] contexto;
*/
Array.prototype.myMap = función myMap(callback,context) {
context = contexto || ventana;
if('map' en Array.prototye) {
devuelve esto .map(callback,context);
}
//Escribe tu propia lógica de ejecución de función de devolución de llamada en IE6-8
var newAry = [];
for( var i = 0,len = this.length; i < len;i++) {
if(tipo de devolución de llamada === 'función') {
var val = callback.call (context,this[i],i,this);
newAry[newAry.length] = val;
}
}
return newAry;
}