El estándar ECMAScript5 se lanzó el 3 de diciembre de 2009, y trae algunas formas nuevas de mejorar las operaciones de matriz de matriz existentes. Sin embargo, estos nuevos métodos de matriz no se hicieron realmente populares porque había una falta de navegadores habilitados para ES5 en el mercado en ese momento.
Matriz "extras"
Nadie dudas sobre la practicidad de estos métodos, pero escribir polifill (PS: complemento compatible con navegadores más antiguos) no vale la pena para ellos. Convierte "debe implementar" en "mejor implementar". Algunas personas realmente llaman a estos métodos de matriz "extras". ¡Por qué!
Pero los tiempos están cambiando. Si observa los populares proyectos JS de código abierto en GitHub, verá que la tendencia está cambiando. Todos quieren reducir muchas dependencias (bibliotecas de terceros) e implementarlas solo con código local.
Ok, comencemos.
Mis 5 matrices
En ES5, hay 9 métodos de matriz en total http://kangax.github.io/compat-table/es5/
Nota* Nueve métodos
Array.prototype.indexof
Array.prototype.lastindexof
Array.prototype.Every
Array.prototype.Ayome
Array.prototype.forach
Array.prototype.map
Array.prototype.filter
Array.prototype.reduce
Array.prototype.reduceright
Elegiré 5 métodos, que personalmente creo que son los más útiles y muchos desarrolladores encontrarán.
1) índice de
El método indexOf () devuelve la posición del primer elemento encontrado en la matriz, y -1 si no existe.
Cuando no se usa índicef
var arr = ['manzana', 'naranja', 'pera'], encontrado = falso; para (var i = 0, l = arr.length; i <l; i ++) {if (arr [i] === 'naranja') {encontrado = true;}} console.log ("encontrado:", encontrado);Después de usar
var arr = ['manzana', 'naranja', 'pera']; console.log ("encontrado:", arr.indexof ("naranja")! = -1);2) Filtro
El método Filter () crea una nueva matriz que coincide con los criterios de filtro.
Cuando el filtro () no se usa
var arr = [{"nombre": "Apple", "contar": 2}, {"nombre": "naranja", "contar": 5}, {"nombre": "pera", "contar": 3}, {"nombre": "naranja", "contar": 16},]; var newarr = []; for (var i = 0, l = arr.length; i <l; i ++) {if (arr [i] .name === "naranja") {newarr.push (arr [i]);}} console.log ("Filtry Results:", Newarr);Use filtro ()::
var arr = [{"nombre": "Apple", "contar": 2}, {"nombre": "naranja", "contar": 5}, {"nombre": "pera", "contar": 3}, {"nombre": "naranja", "contar": 16},]; var newarr = arr.filter (function (item) {return item.name === "naranja";}); console.log ("Filtrar resultados:", newarr);3) foreach ()
foreach ejecuta el método correspondiente para cada elemento
var arr = [1,2,3,4,5,5,6,7,8]; // usa el ciclo habitual "para" bucle para itererfor (var i = 0, l = arr.length; i <l; i ++) {console.log (arr [i]); iteratearr.ForEach (function (item, index) {console.log (item);});foreach se usa para reemplazar el bucle for para
4) mapa ()
Después de MAP () realiza una determinada operación (MAP) en cada elemento de la matriz, se devolverá una nueva matriz.
No uses mapa
var Oldarr = [{First_Name: "Colin", Last_Name: "Toh"}, {first_name: "addy", last_name: "Osmani"}, {first_name: "yehuda", last_name: "katz"}]; function getnewarr () {var newarr = []; para (var i = 0, l = Oldarr.length; i <l; i ++) {var item = Oldarr [i]; item.full_name = [item.first_name, item.last_name] .Join ("); newarr [i] = item;} return newarr;} console.log (getNewarr ());Después de usar mapa
var Oldarr = [{First_Name: "Colin", Last_Name: "Toh"}, {First_Name: "Addy", Last_Name: "Osmani"}, {First_Name: "Yehuda", Last_Name: "Katz"}]; función getNewarr () {return Oldarr.map (function (item, index) {item.full_name = [item.first_name, item.last_name] .Join (""); return item;}); } console.log (getNewarr ());MAP () es una función muy práctica al procesar los datos devueltos por el servidor.
5) Reducir ()
reducir () puede implementar la función de un acumulador, reduciendo cada valor de la matriz (de izquierda a derecha) a un valor.
Para ser honesto, fue un poco difícil entender esta oración al principio, fue demasiado abstracta.
Escenario: estadística cuántas palabras irrepetibles hay en una matriz
Cuando no usa reducir
var arr = ["manzana", "naranja", "manzana", "naranja", "pera", "naranja"]; function getWordCnt () {var obj = {}; for (var i = 0, l = arr.length; i <l; i ++) {var item = arr [i]; obj [item] = (obj [item] +1) || 1; } return obj;} console.log (getWordCnt ());Después de usar Reduce ()
var arr = ["manzana", "naranja", "manzana", "naranja", "pera", "naranja"]; function getWordCnt () {return arr.reduce (function (anterior, next) {previs [next] = (anterior] + 1) || 1; return prev;}, {});} console.log (getwordcnt ());Permítanme explicar mi propia comprensión de reducir primero. Reducir (devolución de llamada, InitialValue) pasará en dos variables. Función de devolución de llamada (devolución de llamada) y InitialValue. Supongamos que la función tiene un parámetro entrante, anterior y siguiente, índice y matriz. Debes entender antes y el siguiente.
En términos generales, antes comienza con el primer elemento en la matriz, y el siguiente es el segundo elemento. Pero cuando pase el valor inicial (InitialValue), el primer previo será InitialValue, y el siguiente será el primer elemento en la matriz.
Por ejemplo:
/** La diferencia entre los dos, ejecutarla en la consola y sabrá*/var arr = ["Apple", "naranja"]; function nopassValue () {return arr.reduce (function (anterior, next) {console.log ("previo:", anterior; console.log ("next:", next); return Prev + "next;};} function passvalue () arr.reduce (function (prev, next) {console.log ("prev:", previo); console.log ("next:", next); previo [next] = 1; return prev;}, {});} console.log ("sin parámetro adicional:", nopassvalue ()); console.log ("-------------------"); consultor.Log ("con {} con {} con {} con {} con {} con {} con {} con {} con {} con {} con {} con {} con {} con {} con {} de {} con {}. parámetro: ", passValue ());