Unterschiede zwischen lodash und Unterstrich [geschlossen]

1602

Warum sollte jemand die Dienstprogrammbibliothek lodash.js oder underscore.js der anderen vorziehen ?

Lodash scheint ein Ersatz für den Unterstrich zu sein, letzterer gibt es schon länger.

Ich denke, beide sind brillant, aber ich weiß nicht genug darüber, wie sie funktionieren, um einen fundierten Vergleich anzustellen, und ich würde gerne mehr über die Unterschiede erfahren.

Brian M. Hunt
quelle
2
Vielleicht möchten Sie einen Blick auf einige der Screenshots zu lodash werfen, auf die auf der Github-Seite verwiesen wird. Persönlich habe ich underscore.js verwendet, aber mehr, weil ich damit angefangen habe und wie Sie sagen, es schon länger gibt.
Jack
26
lodashund underscoresind jetzt unter Merge-Thread
zangw
Zu Ihrer
Information

Antworten:

2023

Ich habe Lo-Dash erstellt, um eine konsistentere umgebungsübergreifende Iterationsunterstützung für Arrays, Zeichenfolgen, Objekte und argumentsObjekte 1 bereitzustellen . Seitdem ist es eine Obermenge von Underscore geworden und bietet ein konsistenteres API-Verhalten, mehr Funktionen (wie AMD-Unterstützung, Deep Clone und Deep Merge), gründlichere Dokumentation und Unit-Tests (Tests, die in Node, Ringo, Rhino, Narwhal, PhantomJS ausgeführt werden und Browser), bessere Gesamtleistung und Optimierungen für große Arrays / Objektiterationen und mehr Flexibilität mit benutzerdefinierten Builds und Dienstprogrammen zur Vorkompilierung von Vorlagen.

Da Lo-Dash häufiger aktualisiert wird als Underscore, wird ein lodash underscoreBuild bereitgestellt , um die Kompatibilität mit der neuesten stabilen Version von Underscore sicherzustellen.

Einmal erhielt ich sogar Push-Zugriff auf Underscore, auch weil Lo-Dash für die Erörterung von mehr als 30 Problemen verantwortlich ist. Fehlerbehebungen, neue Funktionen und Leistungssteigerungen in Underscore v1.4.x +.

Darüber hinaus gibt es mindestens 3 Backbone-Boilerplates, die standardmäßig Lo-Dash enthalten, und Lo-Dash wird jetzt in der offiziellen Dokumentation von Backbone erwähnt .

In Kit Cambridge's Beitrag "Sag" Hallo zu Lo-Dash , um mehr über die Unterschiede zwischen Lo-Dash und Underscore zu erfahren.

Fußnoten:

  1. Unterstrich unterstützt inkonsistent Arrays, Zeichenfolgen, Objekte und argumentsObjekte. In neueren Browsern ignorieren Unterstreichungsmethoden Löcher in Arrays , " argumentsObjekt " -Methoden iterieren Objekte, Zeichenfolgen werden als Array-ähnlich behandelt, und Methoden iterieren Funktionen (ohne Berücksichtigung ihrer "Prototyp" -Eigenschaft) und Objekte (Iteration von schattierten Eigenschaften wie "toString" und " "valueOf"), in älteren Browsern jedoch nicht. Unterstreichungsmethoden wie das _.cloneErhalten von Löchern in Arrays, andere _.flattendagegen nicht.
John-David Dalton
quelle
174
@Brian - Während der Entwicklung von Lo-Dash habe ich weiterhin die Frage gestellt: "Worauf könnte jemand in Lo-Dash als negativ im Vergleich zu Underscore hinweisen?" und dann sie ansprechen. Aus diesem Grund habe ich die Dokumentation verbessert, benutzerdefinierte Builds hinzugefügt und die Quelle besser lesbar gemacht.
John-David Dalton
10
Ich bin sehr versucht, einige Benchmarks zu veröffentlichen, aber das könnte langweilig werden. Es genügt zu sagen, dass jeder von mir durchgeführte Benchmark bewiesen hat, dass Lo-Dash schneller ( in vielen Fällen VIEL schneller) ist als der Unterstrich.
Wil Moore III
186
Ich liebe Lo-Dash und ich benutze es, also denke bitte nicht, dass ich verprügele, aber warum nicht zum Unterstrich beitragen, anstatt eine neue Bibliothek zu erstellen?
Xananax
133
@Xananax - Überprüfen Sie den Kommentarthread: github.com/jashkenas/underscore/commit/… - dies kann diese Frage beantworten.
Rob Grant
41
Gab es irgendwelche Bemühungen, lodash wieder in den Unterstrich zu bringen?
Straßenlaterne
186

Lo-Dash ist vom Unterstrich inspiriert, ist aber heutzutage eine überlegene Lösung. Sie können Ihre benutzerdefinierten Builds erstellen , eine höhere Leistung erzielen , AMD unterstützen und über hervorragende Zusatzfunktionen verfügen . Überprüfen Sie diese Lo-Dash vs Underscore-Benchmarks auf jsperf und .. diesen fantastischen Beitrag über Lo-Dash :

Eine der nützlichsten Funktionen beim Arbeiten mit Sammlungen ist die Kurzsyntax:

var characters = [
  { 'name': 'barney', 'age': 36, 'blocked': false },
  { 'name': 'fred',   'age': 40, 'blocked': true }
];

// using "_.filter" callback shorthand
_.filter(characters, { 'age': 36 });

// using underscore
_.filter(characters, function(character) { return character.age === 36; } );

// → [{ 'name': 'barney', 'age': 36, 'blocked': false }]

(entnommen aus lodash docs )

Neiker
quelle
1
Der Link zum Blog von Kit Cambridge ist sehr informativ.
Brian M. Hunt
Ich denke das ist falsch (das Zupfbeispiel). Ab dem letzten Update 1.8.3 können Sie Zupfen genauso verwenden wie lodash. Trotzdem glaube ich nicht, dass Unterstriche für frühere Versionen eine Funktion
verfügbar machen
7
filterFeature im Unterstrich von 2012 github.com/jashkenas/underscore/issues/648 (der Name ist where)
Muhammad Hewedy
Ich
erhalte
86

Wenn Sie wie ich eine Liste mit Verwendungsunterschieden zwischen Unterstrich und Lodash erwartet haben, gibt es einen Leitfaden für die Migration von Unterstrich zu Lodash .

Hier ist der aktuelle Stand für die Nachwelt:

  • Unterstrich _.anyist Lodash_.some
  • Unterstrich _.allist Lodash_.every
  • Unterstrich _.composeist Lodash_.flowRight
  • Unterstrich _.containsist Lodash_.includes
  • Unterstrich _.eacherlaubt kein Beenden durch Zurückkehrenfalse
  • Unterstrich _.findWhereist Lodash_.find
  • Der Unterstrich _.flattenist standardmäßig tief, während Lodash flach ist
  • Unterstrich _.groupByunterstützt einen Iteratee, dem die Parameter übergeben werden (value, index, originalArray), während in Lodash dem Iteratee für _.groupBynur ein einziger Parameter übergeben wird : (value).
  • Unterstrich _.indexOfmit 3. Parameter undefinedist Lodash_.indexOf
  • Unterstrich _.indexOfmit 3. Parameter trueist Lodash_.sortedIndexOf
  • Unterstrich _.indexByist Lodash_.keyBy
  • Unterstrich _.invokeist Lodash_.invokeMap
  • Unterstrich _.mapObjectist Lodash_.mapValues
  • Unterstrich _.maxkombiniert Lodash_.max&_.maxBy
  • Unterstrich _.minkombiniert Lodash _.min&_.minBy
  • Unterstrich _.samplekombiniert Lodash _.sample&_.sampleSize
  • Unterstrich _.objectkombiniert Lodash _.fromPairsund_.zipObject
  • Unders _.omitdurch ein Prädikat ist Lodash_.omitBy
  • Unterstrich _.pairsist Lodash_.toPairs
  • Unders _.pickdurch ein Prädikat ist Lodash_.pickBy
  • Unterstrich _.pluckist Lodash_.map
  • Unterstrich _.sortedIndexkombiniert Lodash _.sortedIndex&_.sortedIndexOf
  • Unterstrichen _.uniqvon an iterateeist Lodash_.uniqBy
  • Unterstrich _.whereist Lodash_.filter
  • Unterstrich _.isFinitestimmt nicht überein Number.isFinite
    (z. B. _.isFinite('1')Rückgabe truein Unterstrich, aber falsein Lodash)
  • Unders _.matchesStenografie nicht tief Vergleiche unterstützen
    (zB _.filter(objects, { 'a': { 'b': 'c' } }))
  • Unterstrich ≥ 1,7 & Lodash- _.templateSyntax ist
    _.template(string, option)(data)
  • Lodash- _.memoizeCaches sind Mapwie Objekte
  • Lodash unterstützt kein contextArgument für viele Methoden zugunsten von_.bind
  • Lodash unterstützt implizite Verkettung , Lazy Chaining und Shortcut Fusion
  • Lodash gespalten seine überlastet _.head, _.last, _.rest, und _.initialhinaus in
    _.take, _.takeRight, _.drop, und _.dropRight
    (dh _.head(array, 2)in Unterstrichen ist _.take(array, 2)in Lodash)
Iest
quelle
1
Ich bin bei der Migration selbst auf diese Probleme gestoßen und verwalte eine (WIP-) Cross-Dokumentation zwischen den beiden . Hoffe, es ist auch für andere Menschen hilfreich!
Luxon
60

Zusätzlich zu Johns Antwort und dem Nachlesen über lodash (das ich bisher als "ich-auch" angesehen hatte, um es zu unterstreichen) und dem Betrachten der Leistungstests, dem Lesen des Quellcodes und der Blog-Beiträge , den wenigen Punkten, die lodash ausmachen viel besser als Unterstrich sind diese:

  1. Es geht nicht um die Geschwindigkeit, sondern um die Konsistenz der Geschwindigkeit (?)

    Wenn Sie sich den Quellcode des Unterstrichs ansehen, werden Sie in den ersten Zeilen sehen, dass der Unterstrich auf die nativen Implementierungen vieler Funktionen zurückgreift. Obwohl dies in einer idealen Welt ein besserer Ansatz gewesen wäre, wenn Sie sich einige der in diesen Folien angegebenen Perf-Links ansehen , ist es nicht schwer, die Schlussfolgerung zu ziehen, dass die Qualität dieser "nativen Implementierungen" im Browser sehr unterschiedlich ist. zum Browser. Firefox ist in einigen Funktionen verdammt schnell und in einigen dominiert Chrome. (Ich stelle mir vor, es würde einige Szenarien geben, in denen auch der IE dominieren würde). Ich glaube, es ist besser, einen Code zu bevorzugen, dessen Leistung über alle Browser hinweg konsistenter ist.

    Lesen Sie den Blog-Beitrag früher und beurteilen Sie ihn selbst, indem Sie die Benchmarks ausführen, anstatt ihn zu glauben . Ich bin im Moment fassungslos, wenn ich sehe, dass ein Lodash in einfachen , nativen Funktionen wie Array.everyChrome 100-150% schneller als der Unterstrich arbeitet !

  2. Die Extras in lodash sind auch sehr nützlich.

  3. Was den hoch bewerteten Kommentar von Xananax betrifft, der einen Beitrag zum Code des Unterstrichs vorschlägt: Es ist immer besser, einen GUTEN Wettbewerb zu haben , der nicht nur die Innovation am Laufen hält, sondern Sie auch dazu bringt, sich selbst (oder Ihre Bibliothek) in guter Form zu halten.

Hier ist eine Liste der Unterschiede zwischen lodash, und der Unterstrich ist ein Ersatz für Ihre Unterstrichprojekte.

kumarharsh
quelle
6
In welchem ​​Fall ist "Geschwindigkeitskonsistenz" ein Wert? Angenommen, ich habe eine Methode mit einer Geschwindigkeit von 100% in FF und im IE, und eine native Implementierung hätte eine Geschwindigkeit von 80% im IE und 120% im FF (oder umgekehrt). Dann würde ich sagen, es wäre gut, die native Implementierung in FF und die eigene Implementierung in IE zu verwenden. Ich kann mir keinen Fall vorstellen, in dem ich sagen würde: Lassen Sie uns FF verlangsamen, nur um dort die gleiche Geschwindigkeit wie im IE zu haben. Codegröße und Wartbarkeit oder eine durchschnittliche Verlangsamung in allen Browsern wären Argumente, aber Konsistenz der Geschwindigkeit?
Stofl
2
Ich meinte "konstant schnellere Geschwindigkeit"
Kumarshar
1
Was ist mit dem Größenunterschied? Angenommen, Sie erstellen einen benutzerdefinierten Build mit lodash, der genau die gleiche Funktionalität wie der Unterstrich hat. Gibt es einen großen Unterschied zwischen ihnen? Ich würde vermuten, dass die Neuimplementierung der Site Gewicht verleiht.
F Lekschas
5
Ich bin geneigt, auf die native Implementierung des Browsers zurückzugreifen, einfach weil sie in den meisten Fällen eine akzeptable Leistung aufweist und mit Browser-Updates verbessert werden kann, ohne sich Sorgen machen zu müssen, die Bibliothek auf dem neuesten Stand zu halten.
Orad
3
@ KumarHarsh Vielleicht habe ich es nicht gut formuliert. Ich wollte eine Bibliothek verwenden, die intern native Funktionen verwendet, sofern verfügbar, anstatt immer eine eigene Implementierung zu bevorzugen.
Orad
42

Dies ist 2014 und ein paar Jahre zu spät. Trotzdem denke ich, dass mein Punkt gilt:

IMHO wurde diese Diskussion ziemlich überproportional. Zitieren des oben genannten Blogposts :

Die meisten JavaScript-Dienstprogrammbibliotheken wie Underscore, Valentine und wu basieren auf dem "Native-First-Dual-Ansatz". Dieser Ansatz bevorzugt native Implementierungen und greift nur dann auf Vanille-JavaScript zurück, wenn das native Äquivalent nicht unterstützt wird. JsPerf zeigte jedoch einen interessanten Trend: Der effizienteste Weg, über ein Array oder eine Array-ähnliche Sammlung zu iterieren, besteht darin, die nativen Implementierungen vollständig zu vermeiden und stattdessen einfache Schleifen zu wählen.

Als ob "einfache Schleifen" und "Vanille-Javascript" nativer sind als Implementierungen von Array- oder Objektmethoden. Herrgott ...

Es wäre sicherlich schön, eine einzige Quelle der Wahrheit zu haben, aber es gibt keine. Selbst wenn Ihnen etwas anderes gesagt wurde, gibt es keinen Vanille-Gott, mein Lieber. Es tut mir Leid. Die einzige Annahme, die wirklich zutrifft, ist, dass wir alle Javascript-Code schreiben, der darauf abzielt, in allen gängigen Browsern eine gute Leistung zu erzielen, da wir wissen, dass alle unterschiedliche Implementierungen derselben Dinge haben. Es ist eine Schlampe, mit der man fertig werden muss, um es milde auszudrücken. Aber das ist die Voraussetzung, ob Sie es mögen oder nicht.

Vielleicht arbeiten Sie an großen Projekten, die eine Twitter-Performance benötigen, damit Sie den Unterschied wirklich erkennen jetzt zwischen 850.000 (Unterstrich) und 2.500.000 (Lodash) Iterationen über eine Liste pro Sekunde sehen können !

Ich jedenfalls bin es nicht. Ich meine, ich habe Projekte bearbeitet, bei denen ich Leistungsprobleme angehen musste, aber sie wurden weder von Underscore noch von Lo-Dash gelöst oder verursacht. Und wenn ich nicht die wirklichen Unterschiede in Implementierung und Leistung (wir sprechen gerade von C ++) einer Schleife über ein iterables Element (Objekt oder Array, spärlich oder nicht!) Habe, störe ich lieber nicht mit irgendwelchen Ansprüche basierend auf den Ergebnissen einer Benchmark-Plattform, die bereits bewerteten .

Es ist nur ein einziges Update von beispielsweise Rhino erforderlich, um die Implementierungen der Array-Methode so in Brand zu setzen, dass kein einziger "mittelalterlicher Loop-Methode besser und für immer funktioniert und so weiter" Priester sich über die einfache Tatsache streiten kann, dass alle Ein plötzliches Array-Verfahren in FF ist viel schneller als sein / ihr meinungsgebundener Brainfuck. Mann, du kannst deine Laufzeitumgebung einfach nicht betrügen, indem du deine Laufzeitumgebung betrügst! Denken Sie darüber nach, wenn Sie ...

Ihr Versorgungsgürtel

... nächstes Mal.

Um es relevant zu halten:

  • Verwenden Sie Unterstrich, wenn Sie es bequem haben, ohne auf native ish zu verzichten.
  • Verwenden Sie Lo-Dash, wenn Sie sich für Komfort interessieren und den erweiterten Funktionskatalog (Deep Copy usw.) mögen und wenn Sie dringend sofortige Leistung benötigen und es vor allem nichts ausmacht, sich für eine Alternative zu entscheiden, sobald die native API überstrahlt Meinungsumgehungen. Was bald passieren wird. Zeitraum.
  • Es gibt sogar eine dritte Lösung. DIY! Kennen Sie Ihre Umgebungen. Kennen Sie Inkonsistenzen. Lesen Sie den Code ( John-David und Jeremy ). Verwenden Sie dies oder jenes nicht, ohne erklären zu können, warum eine Konsistenz- / Kompatibilitätsschicht wirklich benötigt wird und Ihren Workflow verbessert oder die Leistung Ihrer App verbessert. Es ist sehr wahrscheinlich, dass Ihre Anforderungen mit einer einfachen Polyfüllung erfüllt sind, die Sie perfekt selbst schreiben können. Beide Bibliotheken sind einfach Vanille mit etwas Zucker. Beide streiten sich nur darum, wer den süßesten Kuchen serviert . Aber glauben Sie mir, am Ende kochen beide nur mit Wasser. Es gibt keinen Vanille-Gott, also kann es keinen Vanille-Papst geben, oder?

Wählen Sie den Ansatz, der Ihren Anforderungen am besten entspricht. Wie gewöhnlich. Ich würde jederzeit Fallbacks bei tatsächlichen Implementierungen gegenüber bestimmten Laufzeit-Cheats bevorzugen, aber selbst das scheint heutzutage Geschmackssache zu sein. Halten Sie sich an hochwertige Ressourcen wie http://developer.mozilla.com und http://caniuse.com, und alles wird gut.

Lukas Bünger
quelle
Danke, dass du Lukas gepostet hast. Können die Einbauten weiter optimiert werden? Ich habe festgestellt, dass sie durch die Standards Einschränkungen unterliegen, die sie daran hindern, Optimierungen durchzuführen, die mit den Bibliotheken vergleichbar sind, aber ich weiß die Details nicht ohne weiteres oder ob dies wahr war oder bleibt.
Brian M. Hunt
Beispiel: "Durch die Optimierung für den Anwendungsfall von 99% können fast.js-Methoden bis zu 5-mal schneller sein als ihre nativen Entsprechungen." - github.com/codemix/fast.js
Brian M. Hunt
1
Hallo Brian, es tut mir leid, wenn dies irreführend war. Ich wollte nicht sagen, dass diese Bibliotheken nicht viel schneller sind als ihre ursprünglichen Entsprechungen. Wenn Sie in der hoffnungslosen Notwendigkeit der Leistung sind gerade jetzt , sind Sie wahrscheinlich besser mit einem Toolkit wie LoDash off oder fast.js wie sie liefern tun schnellere Implementierung von Standardmethoden. Wenn Sie sich jedoch für eine Bibliothek entscheiden, die nicht auf native Methoden zurückgreift, verpassen Sie möglicherweise zukünftige Leistungsoptimierungen für integrierte Funktionen. Browser werden sich irgendwann weiterentwickeln.
Lukas Bünger
4
Browser "Hersteller" haben es schwer, die Standards ihrer Browser konform zu halten, geschweige denn leistungsfähiger. Die meisten Leistungssteigerungen bei nativen Implementierungen sind auf schnellere Hardware zurückzuführen. Die Entschuldigung "native Implementierungen werden aufholen" gibt es schon seit Jahren. Jahre = Ewigkeit im Internet. Wenn native Implementierungen jemals aufholen, werden die Bibliotheken aktualisiert, um sie zu verwenden. Das ist das Coole an Open Source. Wenn ein App-Entwickler nicht auf die neueste Bibliothek aktualisiert, wird seine App nicht plötzlich langsamer, sondern nur nicht schneller.
Andrew Steitz
2
... aber wenn Sie sie danach fragen Array.fromwürden, würden sie wahrscheinlich nicht einmal wissen, was es tun soll. Die JS "Utility Belt" -Personen scheinen so sehr damit beschäftigt zu sein, ihre ach so genialen Problemumgehungen zu fördern, dass sie häufig vergessen, dass sie dadurch den Standardisierungsprozess tatsächlich verwässern. Das Fehlen von Funktionen führt zu keinem Druck auf die "Hersteller" des Browsers. Unterhaltsame Tatsache: 2 der 4 Hauptbrowser basieren auf Open Source-Projekten ( 1 , 2 ).
Lukas Bünger
20

Ich stimme den meisten hier gemachten Aussagen zu, möchte aber nur auf ein Argument für underscore.js hinweisen: die Größe der Bibliothek.

Insbesondere für den Fall, dass Sie eine App oder Website entwickeln, die hauptsächlich auf Mobilgeräten verwendet werden soll, können die Größe des resultierenden Bundles und die Auswirkungen auf die Start- oder Downloadzeit eine wichtige Rolle spielen.

Zum Vergleich sind diese Größen diejenigen, die ich mit dem Source-Map-Explorer nach dem Ausführen von Ionic Serve bemerkt habe:

lodash: 523kB
underscore.js: 51.6kb

bearbeitet im Februar 2020 :

Mit BundlePhobia kann die aktuelle Größe von Lo-Dash und Underscore überprüft werden

David Dal Busco
quelle
1
Danke Peter, das ist hier ein lohnender Punkt. An anderer Stelle gibt es weitere Diskussionen, darunter: gist.github.com/alekseykulikov/5f4a6ca69e7b4ebed726 . (Diese Antwort könnte verbessert werden, indem einige der anderen Diskussionen verknüpft und die relevanten Bits zitiert werden.) Der Größenunterschied kann durch Auswahl von Unterabschnitten von lodash plus baumschüttelndem lodash verringert werden. 🕷
Brian M. Hunt
Thx @ BrianM.Hunt für Ihre Antwort, wusste nicht, dass es möglich ist, Unterabschnitte von lodash aufzunehmen, werde einen Blick darauf werfen. Kürzlich hat Ionic mit ionic-native auch einen solchen Weg für ihre nativen Bibliotheken eingeschlagen. Gut zu bemerken, dass sich mehr und mehr Sorgen um die App-Größe machen
David Dal Busco
1
Ich frage mich, woher hast du die 523kB? lodash.com sagt, dass es nur 24kB komprimiert ist. heruntergeladen ist nur 74kB
Martian2049
1
Mein Beitrag wurde im April 2017 erstellt. Wie ich in meinem Kommentar sagte,source-map-explorer after running ionic serve
David Dal Busco
5
Im März 2018 - lodash.min.js ist 72,5 kB und Unterstrich-min.js ist 16,4 kB
Kombinieren Sie den
10

Ich bin mir nicht sicher, ob dies OP bedeutet, aber ich bin auf diese Frage gestoßen, weil ich nach einer Liste von Problemen gesucht habe, die ich bei der Migration von Unterstrich zu Lodash berücksichtigen muss.

Ich würde mich sehr freuen, wenn jemand einen Artikel mit einer vollständigen Liste solcher Unterschiede veröffentlichen würde. Lassen Sie mich mit den Dingen beginnen, die ich auf die harte Tour gelernt habe (dh Dinge, die meinen Code bei der Produktion explodieren ließen: /):

  • _.flattenDer Unterstrich ist standardmäßig tief und Sie müssen true als zweites Argument übergeben, um ihn flach zu machen. In lodash ist es standardmäßig flach und das Übergeben von true als zweites Argument macht es tief! :) :)
  • _.lastDer Unterstrich akzeptiert ein zweites Argument, das angibt, wie viele Elemente Sie möchten. In lodashgibt es keine solche Option. Sie können dies mit emulieren.slice
  • _.first (gleicher Fehler)
  • _.templateDer Unterstrich kann auf viele Arten verwendet werden. Eine davon ist die Bereitstellung der Vorlagenzeichenfolge und der Daten sowie das Zurückholen HTML(oder zumindest hat dies vor einiger Zeit so funktioniert). In lodasherhalten Sie eine Funktion, die Sie dann mit den Daten füttern sollten.
  • _(something).map(foo)arbeitet in Unterstrich, aber in lodash musste ich es umschreiben _.map(something,foo). Vielleicht war das nur eine TypeScriptAusgabe
qbolec
quelle
4
In lodash passiert die Verkettung einen faulen Iterator und erfordert und endpunktähnlich _(something).map(foo).value().
Brian M. Hunt
Dies alles kann Sie treffen, wenn Sie die Backbone-Sammlung verwenden, bei der Proxys diese Bibliotheken
aufrufen
8

http://benmccormick.org/2014/11/12/underscore-vs-lodash/

Neuester Artikel zum Vergleich der beiden von Ben McCormick:

  1. Die API von Lo-Dash ist eine Obermenge von Underscore.

  2. Unter der Haube wurde [Lo-Dash] komplett neu geschrieben.

  3. Lo-Dash ist definitiv nicht langsamer als Underscore.

  4. Was hat Lo-Dash hinzugefügt?

    • Verbesserungen der Benutzerfreundlichkeit
    • Zusätzliche Funktionalität
    • Leistungssteigerungen
    • Kurzsyntaxen für die Verkettung
    • Benutzerdefinierte Builds, um nur das zu verwenden, was Sie benötigen
    • Semantische Versionierung und 100% Codeabdeckung
Pilau
quelle
6

Ich habe nur einen Unterschied gefunden, der für mich wichtig war. Die Nicht-Unterstrich-kompatible Version von lodash sind _.extend()nicht nicht kopieren über Klasse-Ebene definierten Eigenschaften oder Methoden.

Ich habe einen Jasmin-Test in CoffeeScript erstellt, der dies demonstriert:

https://gist.github.com/softcraft-development/1c3964402b099893bd61

Glücklicherweise lodash.underscore.jsbleibt Underscores Verhalten beim Kopieren von allem erhalten, was für meine Situation das gewünschte Verhalten war.

Craig Walker
quelle
4

lodash hat _.mapValues()was ist identisch mit underescore _.mapObject().

Kunstritter
quelle
0

Zum größten Teil ist der Unterstrich eine Teilmenge von lodash. Manchmal, wie derzeit Unterstrich hat coole kleine Funktionen hat lodash nicht wie mapObject. Dieser hat mir viel Zeit bei der Entwicklung meines Projekts gespart.

Rashadb
quelle
Zu der Zeit haben wir _.mapValues
crapthings
@crapthings - Zum Zeitpunkt dieses Beitrags kannte ich mayValues ​​und mapKeys, aber sie sind nicht mit mapObject identisch. Vielleicht gibt es Fälle, in denen man sich gegenseitig anwenden kann, aber mapObject ist eine eigene Funktion.
Rashadb
0

Sie sind sich ziemlich ähnlich, mit Lodash übernimmt ...

Beide sind eine Utility-Bibliothek, die die Welt der Utility in JavaScript übernimmt ...

Scheint, dass Lodash jetzt regelmäßiger aktualisiert wird, also mehr in den neuesten Projekten verwendet wird ...

Auch Lodash scheint um ein paar KBs leichter zu sein ...

Beide haben eine gute API und Doc, aber ich denke, Lodash ist besser ...

Hier ist ein Screenshot für jedes Dokument, um den ersten Wert eines Arrays zu erhalten ...

unterstreichen:

unterstreichen

lodash: lodash

Da die Dinge von Zeit zu Zeit aktualisiert werden können, überprüfen Sie einfach auch deren Website ...

lodash

unterstreichen

Alireza
quelle