Hoy, permítame presentarle este método en detalle, espero que le resulte útil. Este es el uso básico de reducir: Reducir es un método en el objeto prototipo de matriz que nos ayuda a operar matrices. Toma otra función como argumento, que puede llamarse reductor. El reductor toma dos parámetros. El primer parámetro param1 es el resultado de la última ejecución del reductor. Si es la primera vez que se ejecuta el reductor, el valor predeterminado de param1 es el valor del primer elemento de la matriz. El método reduce recorre cada elemento de la matriz, como en un bucle for. Y pase el valor actual en el bucle como parámetro 2. Después de atravesar la matriz, reducir devolverá el resultado calculado por el último reductor. Veamos un ejemplo detallado. A continuación, exploremos cómo se ejecuta el código anterior. En este código, se agrega reductor. Primero, debido a que estamos ejecutando add por primera vez, el primer elemento 'a' de la matriz se tratará como el primer parámetro de add, y luego el bucle comenzará desde el segundo elemento 'b' de la matriz. Esta vez, 'b' es el segundo argumento a agregar. Después del primer cálculo, obtenemos el resultado 'ab'. Este resultado se almacenará en caché y se utilizará como parámetro1 en el siguiente cálculo de suma. Al mismo tiempo, el tercer parámetro 'c' de la matriz se utilizará como parámetro2 de add. Del mismo modo, reduce continúa a través de los elementos de la matriz, ejecutando 'abc' y 'd' como argumentos para agregar. Finalmente, después de atravesar el último elemento de la matriz, se devuelve el resultado del cálculo. Ahora tenemos el resultado: 'abcde'. Entonces, podemos ver que reducir también es una forma de atravesar una matriz. Toma el valor de cada elemento de la matriz por turno y ejecuta la función reductora. Pero podemos ver que el bucle anterior no tiene esa belleza armoniosa. Porque tomamos el primer elemento de la matriz, que es 'a', como parámetro1 inicial, y luego recorremos el segundo elemento de la matriz para obtener param2. De hecho, podemos especificar el segundo parámetro en reducir como el valor inicial de param1 de la función reductora, de modo que param2 se obtendrá en un bucle comenzando desde el primer elemento de la matriz. El código es el siguiente: Esta vez, primero llamamos al reductor con 's' como parámetro1 y luego iteramos a través de la matriz comenzando desde el primer elemento. Entonces podemos reescribir nuestro primer fragmento de código usando esta sintaxis. A continuación, ingresaremos al capítulo de programación real para experimentar el poderoso poder de reducir. ¿Qué harías si quisiéramos obtener la suma de todos los elementos de una matriz? En términos generales, podrías escribir algo como esto: Por supuesto, es posible que tenga otras formas de escribirlo, pero siempre que utilice un bucle for, el código se volverá redundante. Entonces echemos un vistazo a lo que hace la función de acumulación anterior: Establecer la suma inicial en cero Obtenga el primer elemento de la matriz y súmelo Almacenar en caché el resultado del paso anterior en suma Saque otros elementos de la matriz por turno y realice las operaciones anteriores devolver resultado final Podemos ver que cuando describimos los pasos anteriores en palabras, es obvio que se ajusta al uso de reducir. Entonces podemos reescribir el código anterior usando reducir: Si está acostumbrado a utilizar funciones de flecha, el código anterior se verá más limpio: ¡Una línea de código y listo! Por supuesto, la multiplicación acumulativa y la acumulación son exactamente iguales: Muchas veces, necesitamos agregar un peso al sumar, lo que puede reflejar mejor la elegancia de reducir. Si deseas obtener los valores máximo y mínimo de una matriz, puedes escribir: Esto es lo mismo que antes, si usamos reducir podemos hacerlo en una línea de código. A menudo necesitamos contar el número de apariciones de cada elemento en una matriz. El método de reducción nos ayuda a lograr esto. Tenga en cuenta que utilizamos objetos de mapa en lugar de objetos para almacenar frecuencias estadísticas, porque los elementos de la matriz pueden ser del tipo de objeto y las claves de los objetos solo pueden ser del tipo cadena o símbolo. Aquí hay dos ejemplos: De manera similar, si desea contar la frecuencia de cada carácter en una cadena, primero puede convertir la cadena en una matriz de caracteres y luego seguir el método anterior. Debido a que los tipos de caracteres se pueden usar como claves para objetos, no usaremos un mapa aquí. Se accede a cada elemento de la matriz de forma secuencial mediante reducción. Si encontramos que el elemento sigue siendo una matriz, llamamos al método plano de forma recursiva. Prefacio
vararr = [1, 2, 3];
función reductor(parmar1, parmar2){
}
arr.reduce(reductor)
var arr = ['a', 'b', 'c', 'd', 'e'];
función agregar(x, y) {
devolver x + y;
}
arr.reducir(agregar)
var arr = ['a', 'b', 'c', 'd', 'e'];
función agregar(x, y) {
devolver x + y;
}
arr.reduce(agregar, 's')
var arr = ['a', 'b', 'c', 'd', 'e'];
función agregar(x, y) {
devolver x + y;
}
arr.reducir(agregar, '')
1. Acumulación y multiplicación acumulativa
acumulación de funciones (arr) {
sea suma = 0;
for (sea i = 0; i
acumulación de funciones (arr) {
función reductor(x, y) {
volver x + y
}
return arr.reduce(reductor, 0);
}
acumulación de funciones (arr) {
return arr.reduce((x, y) => x + y, 0);
}
multiplicación de funciones (arr) {
return arr.reduce((x, y) => x * y, 1);
}
puntuaciones constantes = [
{puntuación: 90, asunto: "HTML", peso: 0,2},
{puntuación: 95, asunto: "CSS", peso: 0,3},
{puntuación: 85, asunto: "JavaScript", peso: 0,5}
];
resultado constante = puntuaciones.reduce((x, y) => x + y.puntuación * y.peso, 0 // 89);
2. Obtener los valores máximo y mínimo de una matriz.
función máx(arr){
let max = arr[0];
for (dejar ele de arr) {
si(ele > max) {
máx = ele;
}
}
retorno máximo;
}
sea arr = [3,24, 2,78, 999];
arr.reduce((x, y) => Math.max(x, y));
arr.reduce((x, y) => Math.min(x, y));
3. Calcule la frecuencia de aparición de elementos en la matriz.
función contarFrecuencia(arr) {
return arr.reduce(función(resultado, ele){
// Juzga si este elemento ha sido contado antes
si (resultado.get(ele)! = indefinido) {
/**
* Si este elemento ha sido contado anteriormente,
* aumentar la frecuencia de su aparición en 1
*/
resultado.set(ele, resultado.get(ele) + 1)
} demás {
/**
* Si este elemento no ha sido contado antes,
* establecer la frecuencia de su aparición en 1
*/
resultado.set(ele, 1);
}
resultado de devolución;
}, nuevo mapa());
}
let str = 'hola mundo';
str.split('').reduce((resultado, currentChar) => {
resultado[carácteractual]? resultado[carácteractual] ++: resultado[carácteractual] = 1;
resultado de devolución;
}, {})
4. Aplanamiento de múltiples matrices
función Plano(arr = []) {
return arr.reduce((t, v) => t.concat(Array.isArray(v)? Flat(v): v), [])
}