Willi Wanilli: Frage zu Rückgabewert von Array.reduce()

Hallo,

Frage zu array.reduce():

// Fallbeispiel A
function myFunc() {
      return myArr.reduce((acc,cur) => {
        acc[cur] = "Ein Wert";
        return acc;
      }, {});
    }

ergibt, wie erwartbar

{ one: "Ein Wert", two: "Ein Wert", three: "Ein Wert" }

Bisher dachte ich, das ließe sich auch vereinfachen und Shorthand simplifizieren als

// Fallbeispiel B
   function myFuncShort() {
      return myArr.reduce((acc,cur) => acc[cur] = "Ein Wert", {});
    }

Daraus resultiert aber nur Ein Wert.

Typischerweise benötigen Higher Order Functions doch kein 'return' wenn als 'Einzeiler' angegeben (zumindest ist dies bei 'map', 'filter', etc. der Fall!), ist das bei 'reduce' nicht so?

Bzw. ist der Rückgabewert dann nicht automatisch 'acc' und die Funktion weiß nicht, was sie zurückgeben soll?

Warum entspricht Fallbeispiel A nicht Fallbeispiel B?

Danke für Aufklärung,

Willi Wanilli

  1. @@Willi Wanilli

    // Fallbeispiel B
       function myFuncShort() {
          return myArr.reduce((acc,cur) => acc[cur] = "Ein Wert", {});
        }
    

    Daraus resultiert aber nur Ein Wert.

    argument => expression;
    

    ist dasselbe wie

    argument => {
      return expression;
    };
    

    Das heißt in deinem Fall:

    (acc,cur) => acc[cur] = "Ein Wert"
    

    ist dasselbe wie

    (acc,cur) => {
      return acc[cur] = "Ein Wert";
    };
    

    Der Rückgabewert ist also das Ergebnis der Zuweisung acc[cur] = "Ein Wert", also "Ein Wert".

    🖖 Живіть довго і процвітайте

    --
    „Ukončete, prosím, výstup a nástup, dveře se zavírají.“
  2. Hallo Willi Wanilli,

    wenn du nur mit reduce spielen wolltest - ok.

    Aber eigentlich solltest Du Dir für diese Aufgabe die fill-Methode anschauen.

    Rolf

    --
    sumpsi - posui - obstruxi