6

Zum Beispiel, ich habe Codes (Coffee) wie folgt aus:In lodash.js, speichert es das Ergebnis für `.value()` Methode?

sortedLatLng = _(w) 
    .sortBy (x) -> x.time 
    .map (x) -> [x.longitude,x.latitude] 
    .uniq((x)-> x[0].toFixed(3) + "," + x[1].toFixed(3)) # keep three decimal to merge nearby points 
console.log(sortedLatLng.value()) 
myFunction1(sortedLatLng.value()) 
myFunction2(sortedLatLng.value()) 
console.log(sortedLatLng.reverse().value()) 

Dieses später von anderen lodash Verfahren verkettet werden können. In der Zwischenzeit kann es notwendig sein, den Wert zu extrahieren. Ich habe mich gefragt, ob es das Ergebnis zwischenspeichern wird. Ich habe nicht gefunden, wie es in der Dokumentation implementiert ..

Wird es einmal oder zweimal berechnet werden:

myFunction1(sortedLatLng.value()) 
myFunction2(sortedLatLng.value()) 

Hat jemand Ideen dazu hat?

+1

Sie könnten dies leicht herausfinden, indem Sie einen strikten Vergleich zweier Aufrufe von '.value()' durchführen. – idbehold

+0

Ich habe dreimal Probleme mit der Bibliothek 'lodash'. Ich bekomme unerwartete Ergebnisse, und ich frage mich auch, ob 'lodash' etwas mit Caching macht, das ich nicht erwarte. Für mich scheinen alle Ergebnisse meiner Tests darauf hinzuweisen, dass "lodash" -resultierende Objekte auf irgendeine Weise bestehen bleiben/cachen, in einer Weise, die für das, was ich versuche, unbequem ist. – CtheGood

Antwort

1

Wenn Sie einen lodash-Wrapper erstellen, wird der umbrochene Wert im Wrapper gespeichert. Zum Beispiel:

var wrapper = _([ 1, 2, 3 ]); 

Hier wird [ 1, 2, 3 ] in wrapper gespeichert und alle verketteten Operationen an den Wrapper hinzugefügt diesen Wert übergeben werden. Verkettete Operationen sind gespeichert, nicht ausgeführt. Zum Beispiel:

var wrapper = _([ 1, 2, 3 ]).map(function(item) { 
    console.log('mapping'); 
    return item; 
}); 

Dieser Code erstellt einen Wrapper mit einem map() Betrieb, sie aber nicht ausführen. Stattdessen speichert es die verkettete Operationen so, dass, wenn value() genannt wird, kann er sich ausführen:

var wrapper = _([ 1, 2, 3 ]).map(function(item) { 
    console.log('mapping'); 
    return item; 
}); 

wrapper.value() 
// mapping 
// ... 

Aufruf value() wieder auf diesem Wrapper einfach die gleichen Operationen auf dem umwickelten Wert wiederholen - Ergebnisse werden nicht zwischengespeichert.