hva er tilsvarende en redusere i javascript

stemmer
0

Jeg er en backend dev flyttet nylig inn js side. Jeg gikk gjennom en tutorial og kom over under stykke kode.

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);
    }
}

Her prøvde jeg å forstå mye om hva som skjer, er det noe som heter reduce, og en annen ting som heter validSoFar. Jeg klarer ikke å forstå hva som skjer under panseret. :-(

Jeg får den vanlige sløyfer ting som er gjort i Java.

Kan noen vennligst dusj lys over hva som skjer her. Jeg skal bruke dette mye i min vanlige jobb.

Takk

Publisert på 19/09/2018 klokken 13:24
kilden bruker
På andre språk...                            


3 svar

stemmer
0

Dette er en rimelig tilsvarende:

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

Dette er en noe merkelig bruk av reduce, for å være ærlig, fordi det gjør mer enn bare å redusere en liste til en enkelt verdi. Det produserer også bivirkninger (formodentlig) i anropet til showHelpMessageIfInvalid().

Ideen om reduceer enkel. Gitt en liste med verdier som du ønsker å kaste ned en om gangen til en enkelt verdi (av samme eller annen type), leverer du en funksjon som tar den aktuelle brettet verdi og neste listen verdi og returnerer en ny foldet verdi , og man tilføre en første foldet verdi, og reducekombinerer dem ved å kalle funksjonen med hver etterfølgende liste verdi og den aktuelle verdi foldet.

Så, for eksempel,

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
Svarte 19/09/2018 kl. 13:45
kilden bruker

stemmer
0

Det gir ikke mening å bruke redusere det og har bivirkninger i redusere. Bedre bruk Array.prototype.filter å få alle ugyldige utgiftspostene.

Deretter bruker Array.prototype.forEach for å produsere bivirkning (e) for hvert ugyldig element. Deretter kan du sjekke lengden ugyldig utgiftspostene rekke å se det innspill var gyldig:

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);
  }
}

Den MDN dokumentasjon for Array.prototype.reduce har en god beskrivelse og eksempler på hvordan du bruker den.

Det skal ta en rekke ting og gå tilbake en annen ting (kan være forskjellig type ting). Men du vil ikke finne noen eksempler der hvor bivirkningene er igangsatt i redusering funksjon.

Svarte 19/09/2018 kl. 13:42
kilden bruker

stemmer
0

Den redusere funksjon her er iterere gjennom hver innmatingskomponent av utgiftene form og trinnvis å tilordne til en boolsk. Hvis du har si tre innganger hver med en ekte gyldighet, redusere funksjonen vil returnere:

  1. true && true hvor den første ekte er den opprinnelige verdi føres inn i redusert.
  2. true && true og hvor den første virkelige her er resultatet av det forrige resultatet.
  3. true && true

På slutten av reduksjonen, er du igjen med en enkel boolsk representerer gyldigheten av hele, der etter at hvis bare én input komponent gyldighet er falsk, vil hele reduksjonen utgjøre falsk. Dette er fordi validSoFarholder styr på den generelle gyldigheten og er mutert ved å returnere forbindelsen om skjemaet er gyldig så langt, og gyldigheten av den nåværende input i iterasjon.

Svarte 19/09/2018 kl. 13:38
kilden bruker

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