JavaScript Verstehe Konstrukt nicht (lodash)

Hendoul

Commander
Registriert
Apr. 2008
Beiträge
2.049
Hi :)

Ich verstehe folgendes Konstrukt nicht:

Javascript:
_(result['blub'].total)
    .groupBy('something')

Und zwar den Teil '_(' verstehe ich nicht. Underscore und dann eine Klammer. Steht das _ für lodash ( wird importiert) oder für irgendwas anderes? Ich verstehe auch nicht, warum man dann 'groupBy' nur mit 'something' aufrufen kann, an erster Stelle müsste ja das Array stehen das man gruppieren möchte?
 
Wenn du lodash eingebunden hast, liegt es wohl nahe, dass es das auch ist. Warum es den _ gibt? Beispiel:

Javascript:
function lodash(msg) {
    console.log(msg);
}

var _ = lodash;

_("Hallo");

Die groupBy-Funktion ist Teil der lodash-Bibliothek und arbeitet mit dem Ergebnis, das aus _(result['blub'].total) herauskommt. Nennt sich Verkettung.
 
Lodash und Underscore sind gute Utility Bibliotheken in JavaScript. Schau Dir an, wie Du lodash eingebunden hast. Laut Website von denen macht man eine Variable names "_" (also ein Lodash/Underscore ;)) und voila: So steht es dann auch zur Verfügung.

In JS kannst Du halt quasi alles einer Variablen zuweisen.

Nutzt Du auch JQuery? Dort ist der Shortcut-Operator auch nicht weit weg davon ;)
 
Die Schreibweise ist fast gleich zu folgender:
Javascript:
_.groupBy(result['blub'].total, 'something')

Mit _() erstellst du quasi vorher eine lodash Objekt und kannst darauf Methoden wie z. B. groupBy direkt anwenden ohne, dass du das Array immer mit übergeben musst.

Wichtig ist, dass man nach dem groupBy .value() aufruft um das Ergebnis statt dem lodash Objekt zu haben. Der Vorteil ist, dass du einfacher Chaining betreiben kannst.

Beispiel: https://jsfiddle.net/f6ds7g8n/1/
Javascript:
// mit Verkettung
const resultsWith = _([1,2,3,4,5,6])
    .groupBy(v => v % 2)
    .map(r => r.length)
    .value();
    
console.log("Mit Verkettung: " + resultsWith);

// ohne Verkettung
const resultsWithout = _.map(_.groupBy([1,2,3,4,5,6], v => v % 2), r => r.length);
    
console.log("Ohne Verkettung: " + resultsWithout);

Da kannst dir jetzt natürlich überlegen, welches einfacher zu lesen ist.

Siehe Dokumentation: https://lodash.com/docs/4.17.11#lodash
 
Vielen Dank für die Erklärungen :)
 
Zurück
Oben