lo que es el equivalente a un reducir en javascript

votos
0

Soy un desarrollador backend se trasladó recientemente a lado js. Iba a través de un tutorial y me encontré con la pieza por debajo del código.

clickCreate: function(component, event, helper) {
    var validExpense = component.find('expenseform').reduce(function (validSoFar, inputCmp) {
        // Displays error messages for invalid fields
        inputCmp.showHelpMessageIfInvalid();
        return validSoFar && inputCmp.get('v.validity').valid;
    }, true);
    // If we pass error checking, do some real work
    if(validExpense){
        // Create the new expense
        var newExpense = component.get(v.newExpense);
        console.log(Create expense:  + JSON.stringify(newExpense));
        helper.createExpense(component, newExpense);
    }
}

Aquí traté de entender mucho de lo que está sucediendo, hay algo que se llama reduce, y otra cosa nombrada validSoFar. Soy incapaz de entender lo que está sucediendo bajo el capó. :-(

Me pongo los bucles regulares Stuff como se hace en Java.

Por favor alguien puede ducharse alguna luz sobre lo que está pasando aquí. Que debería usar esto mucho en mi trabajo regular.

Gracias

Publicado el 19/09/2018 a las 13:24
fuente por usuario
En otros idiomas...                            


3 respuestas

votos
0

Este es un equivalente razonable:

var validExpense = true;
var inputCmps = component.find('expenseform')
for (var i = 0; i < inputCmps.length; i++) {
    // Displays error messages for invalid fields
    inputCmp.showHelpMessageIfInvalid();
    if (!inputCmp.get('v.validity').valid) {
        validExpense = false;
    }
}
// Now we can use validExpense

Este es un uso un tanto extraña de reduce, para ser honesto, ya que hace algo más que una simple reducción de una lista a un solo valor. También produce efectos secundarios (presumiblemente) en la llamada a showHelpMessageIfInvalid().

La idea de reducees simple. Dada una lista de valores que desea plegar uno a la vez en un solo valor (de la misma o de cualquier otro tipo), que proporciona una función que toma el valor doblado actual y el siguiente valor de lista y devuelve un nuevo valor plegada y que proporcione un valor de plegado inicial, y reducelas combina llamando a la función con cada valor de la lista sucesiva y el valor actual de plegado.

Así, por ejemplo,

var items = [
  {name: 'foo', price: 7,  quantity: 3},
  {name: 'bar', price: 5,  quantity: 5},
  {name: 'baz', price: 19, quantity: 1}
]

const totalPrice = items.reduce(
  (total, item) => total + item.price * item.quantity, // folding function
  0  // initial value
); //=> 65
Respondida el 19/09/2018 a las 13:45
fuente por usuario

votos
0

No tiene sentido utilizar reducir allí y tienen efectos secundarios en el reducir. Mejor utilizar Array.prototype.filter para obtener todas las partidas de gastos no válidos.

A continuación, utilice Array.prototype.forEach para producir efecto secundario (s) para cada elemento no válido. A continuación, puede comprobar la longitud de las partidas de gastos no válida matriz para ver su entrada era válida:

function(component, event, helper) {
  var invalidExpenses = component.find('expenseform').filter(
    function(ex){
      //return not valid (!valid)
      return !ex.get('v.validity').valid
    }
  );
  invalidExpenses.forEach(
    //use forEach if you need a side effect for each thing
    function(ex){
      ex.showHelpMessageIfInvalid();
    }
  );
  // If we pass error checking, do some real work
  if(invalidExpenses.length===0){//no invalid expense items
      // Create the new expense
      var newExpense = component.get("v.newExpense");
      console.log("Create expense: " + JSON.stringify(newExpense));
      helper.createExpense(component, newExpense);
  }
}

La documentación MDN para Array.prototype.reduce tiene una buena descripción y ejemplos sobre cómo usarlo.

Se debe tomar una serie de cosas y volver otra cosa (puede ser diferente tipo de cosas). Pero usted no encontrará ningún ejemplo ahí donde se inician los efectos secundarios en la función de reductor.

Respondida el 19/09/2018 a las 13:42
fuente por usuario

votos
0

La función de reducir aquí se iteración a través de cada componente de entrada del formulario de gastos y de forma incremental correlacionando con un booleano. Si usted tiene decir tres entradas cada uno con una verdadera validez, el reducir la función devolvería:

  1. true && true donde el primer verdadero es el valor inicial pasado a reducir.
  2. true && true y donde el primer cierto aquí es el resultado del resultado anterior.
  3. true && true

Al final de la reducción, uno se queda con una sola booleano que representa la validez de la totalidad, donde por la validez que si una sola de componente de entrada es falsa, la reducción total ascenderá a falso. Esto es porque validSoFarrealiza un seguimiento de la validez general y está mutado mediante la devolución del compuesto de la si la forma es válida hasta ahora y la validez de la entrada actual en la iteración.

Respondida el 19/09/2018 a las 13:38
fuente por usuario

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more