Que significa los parametros de reduce – javascript

Pregunta:


Quiero encontrar la minima suma de un arreglo

es decir de este arreglo [5,4,2,3] la minima suma es 22.

mi solucion es:

function minSum(arr) {
  arr = Object.values(arr).sort((a, b) => a - b);

  var j = arr.length - 1;
  var suma = 0;
  for (var i = 0; i < arr.length - 1 / 2; i++) {
    suma = suma + arr[i] * arr[j];
    j--;
  }
  return suma / 2;
}

console.log(minSum([5, 4, 2, 3]));

pero tambien el siguiente codigo seria otra solucion

minSum = a => (a = a.slice().sort((a, b) => a - b)).reduce((x, y, i) => x + (y * a[a.length - 1 - i]), 0) / 2

console.log(minSum([5, 4, 2, 3]));

No entiendo esta parte: reduce((x, y, i) que son estos parametros y de donde vienen?

Preguntado por: hubman

Einer

El parametro x se llama acumulador o accumulator. Esta contiene el valor de la operacion anterior retornada. Por ejemplo:

var resultado = [1,1,1,1].reduce(function(acumulador ){ 
  console.log("El valor del acumulador es " + acumulador);
  
  return acumulador+1;
})

console.log("La suma total es " + resultado);

Fijate como el valor del parametro acomulator va incrementando de 1 en 1. Esto pasa por la expresion return acumulador + 1. Solo para mostrar un ejemplo mas claro, el acumulador seria asi:

var array = [1,1,1,1];
var acumulador = 0;
for(var i = 0; i < array.length;i++)
{
  acumulador = acumulador + array[i];
}

console.log(acumulador);

Nota como se suma el valor del mismo con el valor actual del array. acumulador = acumulador + array[i]; es lo mismo que return acumulador + 1;.

y representa el valor actual del array siendo procesado. En el ejemplo arriba, representaria array[i].

Y por ultimo i, representa el indice de elemento siendo procesado. En ejemplo este representaria la variable i definida en el for.

Sintaxis:

var resultado = arr.reduce(funcion[, valorInicial]);

El método reduce() aplica una función a un acumulador y a cada valor de un array (de izquierda a derecha) para reducirlo a un único valor.

Parametros de .reduce:

  • funcion

Función a ejecutar para cada valor del array, que recibe cuatro parámetros:

Parámetros de la función:

  • valorAnterior

El valor devuelto (retornado) en la llamada anterior de la función, o
el valorInicial, si se proveyó. (Ver a continuación.)

  • valorActual

Elemento actual que está siendo procesado en el array.

  • indiceActual

Índice del elemento actual que está siendo procesado en el array.

  • array

El array sobre el cual se llamó el método reduce.

  • valorInicial

Objeto a usar como primer argumento en la primera llamada de la función.

Ejemplo Practico:

[0,1,2,3,4].reduce(function(valorAnterior, valorActual, indice, vector){
  return valorAnterior + valorActual;
});

// Primera llamada
valorAnterior = 0, valorActual = 1, indice = 1

// Segunda llamada
valorAnterior = 1, valorActual = 2, indice = 2

// Tercera llamada
valorAnterior = 3, valorActual = 3, indice = 3

// Cuarta llamada
valorAnterior = 6, valorActual = 4, indice = 4

// el array sobre el que se llama a reduce siempre es el objeto [0,1,2,3,4] 

// Valor Devuelto: 10

Con valor inicial:

[0,1,2,3,4].reduce(function(valorAnterior, valorActual, indice, vector){
  return valorAnterior + valorActual;
}, 10);

// Primera llamada
valorAnterior = 10, valorActual = 0, indice = 0

// Segunda llamada
valorAnterior = 10, valorActual = 1, indice = 1

// Tercera llamada
valorAnterior = 11, valorActual = 2, indice = 2

// Cuarta llamada
valorAnterior = 13, valorActual = 3, indice = 3

// Quinta llamada
valorAnterior = 16, valorActual = 4, indice = 4

// el array sobre el que se llama a reduce siempre es el objeto [0,1,2,3,4] 

// Valor Devuelto: 20

Fuente y más ejemplos aquí

Fuente

Add a Comment

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *