Perbedaan antara lodash dan garis bawah [ditutup]

1602

Mengapa seseorang lebih memilih perpustakaan utilitas lodash.js atau underscore.js daripada yang lain?

Lodash tampaknya menjadi pengganti drop-in untuk garis bawah, yang terakhir telah ada lebih lama.

Saya pikir keduanya brilian, tetapi saya tidak cukup tahu tentang bagaimana mereka bekerja untuk membuat perbandingan berpendidikan, dan saya ingin tahu lebih banyak tentang perbedaan.

Brian M. Hunt
sumber
2
Anda mungkin ingin melihat beberapa layar-gips tentang lodash yang tertaut pada halaman github-nya. Secara pribadi saya telah menggunakan underscore.js, tetapi lebih karena itulah yang saya mulai dan seperti yang Anda katakan sudah ada lebih lama.
Jack
26
lodashdan underscoreberada di bawah utas gabungan sekarang
zangw

Jawaban:

2023

Saya membuat Lo-Dash untuk memberikan dukungan iterasi lintas-lingkungan yang lebih konsisten untuk array, string, objek, dan argumentsobjek 1 . Sejak itu menjadi superset dari Underscore, memberikan perilaku API yang lebih konsisten, lebih banyak fitur (seperti dukungan AMD, klon dalam, dan penggabungan dalam), dokumentasi dan unit test yang lebih teliti (tes yang berjalan di Node, Ringo, Badak, Narino, Narwhal, PhantomJS , dan browser), kinerja keseluruhan yang lebih baik dan optimisasi untuk array besar / iterasi objek, dan lebih banyak fleksibilitas dengan build kustom dan utilitas template pra-kompilasi.

Karena Lo-Dash diperbarui lebih sering daripada Underscore, lodash underscorebuild disediakan untuk memastikan kompatibilitas dengan versi stabil terbaru dari Underscore.

Pada satu titik saya bahkan diberi akses push ke Underscore, sebagian karena Lo-Dash bertanggung jawab untuk mengangkat lebih dari 30 masalah; perbaikan bug pendaratan, fitur baru, & peningkatan kinerja di Underscore v1.4.x +.

Selain itu, setidaknya ada 3 pelat punggung Backbone yang menyertakan Lo-Dash secara default dan Lo-Dash sekarang disebutkan dalam dokumentasi resmi Backbone .

Lihat pos Kit Cambridge, Katakan "Halo" kepada Lo-Dash , untuk perincian lebih dalam tentang perbedaan antara Lo-Dash dan Underscore.

Catatan kaki:

  1. Underscore memiliki dukungan yang tidak konsisten untuk array, string, objek, dan argumentsobjek. Di browser yang lebih baru, metode Garis Bawah mengabaikan lubang dalam array , "Objek" metode iterate argumentsobjek, string diperlakukan seperti array, dan metode dengan benar fungsi iterate (mengabaikan properti "prototipe" mereka) dan objek (iterating properti yang dibayangi seperti "toString" dan "valueOf"), sementara di browser lama mereka tidak akan melakukannya. Juga, garis bawah metode seperti _.clonemempertahankan lubang dalam array, sementara yang lain suka _.flatten.
John-David Dalton
sumber
174
@Brian - Saat mengembangkan Lo-Dash, saya terus mengajukan pertanyaan, "Apa yang bisa ditunjukkan seseorang, di Lo-Dash, sebagai negatif dibandingkan dengan Underscore?" dan kemudian mengatasinya. Inilah sebabnya saya menambahkan dokumentasi, menambahkan custom builds, & membuat sumber lebih mudah dibaca.
John-David Dalton
10
Saya sangat tergoda untuk memposting beberapa tolok ukur, tetapi itu bisa menjadi membosankan. Cukup untuk mengatakan bahwa setiap benchmark yang saya jalankan telah membuktikan Lo-Dash lebih cepat ( JAUH lebih cepat dalam banyak kasus) daripada garis bawah.
Wil Moore III
186
Saya suka lo-dash dan saya menggunakannya, jadi tolong jangan berpikir saya bashing, tapi mengapa tidak berkontribusi pada garis bawah alih-alih membuat perpustakaan baru?
Xananax
133
@Xananax - periksa utas komentar: github.com/jashkenas/underscore/commit/… - ini dapat menjawab pertanyaan itu.
Rob Grant
41
Apakah ada upaya untuk menggabungkan lodash kembali ke garis bawah?
lampu jalan
186

Lo-Dash terinspirasi oleh garis bawah, tetapi saat ini adalah solusi yang unggul. Anda dapat membuat bangunan kustom , memiliki kinerja lebih tinggi , mendukung AMD, dan memiliki fitur tambahan yang hebat . Periksa tolok ukur Lo-Dash vs Underscore ini di jsperf dan .. pos mengagumkan tentang lo-dasbor ini :

Salah satu fitur paling berguna ketika Anda bekerja dengan koleksi, adalah sintaks singkatan:

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 }]

(diambil dari lodash docs )

neiker
sumber
1
Tautan ke blog Kit Cambridge sangat informatif.
Brian M. Hunt
Saya pikir ini salah (contoh memetik). Pada pembaruan terakhir 1.8.3, Anda dapat menggunakan memetik dengan cara yang sama seperti lodash. lagi pula untuk versi sebelumnya, saya tidak berpikir garis bawah akan mengekspos fungsi yang sama dengan peta (contoh garis bawah Anda tampak seperti fungsi peta)
alexserver
7
filterfitur dalam garis bawah dari 2012 github.com/jashkenas/underscore/issues/648 (namanya where)
Muhammad Hewedy
Saya mendapatkan error 500 pada tautan benchmark Lo-Dash vs Underscore
Hylle
86

Jika seperti saya Anda mengharapkan daftar perbedaan penggunaan antara garis bawah dan lodash, ada panduan untuk bermigrasi dari garis bawah ke lodash .

Berikut keadaan saat ini untuk anak cucu:

  • Garis bawah _.anyadalah Lodash_.some
  • Garis bawah _.alladalah Lodash_.every
  • Garis bawah _.composeadalah Lodash_.flowRight
  • Garis bawah _.containsadalah Lodash_.includes
  • Garis bawah _.eachtidak memungkinkan keluar dengan kembalifalse
  • Garis bawah _.findWhereadalah Lodash_.find
  • Garis _.flattenbawah dalam secara default saat Lodash dangkal
  • Garis bawah _.groupBymendukung iteratee yang lulus parameter (value, index, originalArray), sementara di Lodash, yang iteratee untuk _.groupByhanya melewati parameter tunggal: (value).
  • Garis bawah _.indexOfdengan parameter ke-3 undefinedadalah Lodash_.indexOf
  • Garis bawah _.indexOfdengan parameter ke-3 trueadalah Lodash_.sortedIndexOf
  • Garis bawah _.indexByadalah Lodash_.keyBy
  • Garis bawah _.invokeadalah Lodash_.invokeMap
  • Garis bawah _.mapObjectadalah Lodash_.mapValues
  • Garis bawah _.maxmengkombinasikan Lodash _.max&_.maxBy
  • Garis bawah _.minmengkombinasikan Lodash _.min&_.minBy
  • Garis bawah _.samplemengkombinasikan Lodash _.sample&_.sampleSize
  • Garis bawah _.objectmenggabungkan Lodash _.fromPairsdan_.zipObject
  • Garis bawah _.omitberdasarkan predikat adalah Lodash_.omitBy
  • Garis bawah _.pairsadalah Lodash_.toPairs
  • Garis bawah _.pickberdasarkan predikat adalah Lodash_.pickBy
  • Garis bawah _.pluckadalah Lodash_.map
  • Garis bawah _.sortedIndexmengkombinasikan Lodash _.sortedIndex&_.sortedIndexOf
  • Garis bawahi _.uniqoleh a iterateeadalah Lodash_.uniqBy
  • Garis bawah _.whereadalah Lodash_.filter
  • Garis bawah _.isFinitetidak selaras dengan Number.isFinite
    (mis. _.isFinite('1')Mengembalikan truedalam Garis Bawah tetapi falsedalam Lodash)
  • Garis bawah _.matchesgaris bawah tidak mendukung perbandingan yang dalam
    (mis. _.filter(objects, { 'a': { 'b': 'c' } }))
  • Garis bawah ≥ 1,7 & _.templateSintaks Lodash adalah
    _.template(string, option)(data)
  • _.memoizeCache Lodash Mapseperti benda
  • Lodash tidak mendukung contextargumen untuk banyak metode yang mendukung_.bind
  • Lodash mendukung chaining implisit , chaining malas, & fusion shortcut
  • Lodash membagi nya kelebihan beban _.head, _.last, _.rest, & _.initialkeluar ke
    _.take, _.takeRight, _.drop, & _.dropRight
    (yaitu _.head(array, 2)di Menggarisbawahi adalah _.take(array, 2)di Lodash)
Iest
sumber
1
Saya sendiri pernah menemukan masalah ini ketika bermigrasi dan saya mempertahankan dokumentasi silang (WIP) yang berjalan antara satu dan yang lainnya. Semoga bermanfaat bagi orang lain juga!
luxon
60

Selain jawaban John, dan membaca di Lodash (yang sebelumnya saya anggap sebagai "saya juga" untuk menggarisbawahi), dan melihat tes kinerja, membaca kode sumber, dan posting blog , beberapa poin yang membuat lodash jauh lebih unggul daripada garis bawah adalah ini:

  1. Ini bukan tentang kecepatan, karena ini tentang konsistensi kecepatan (?)

    Jika Anda melihat kode sumber garis bawah, Anda akan melihat di beberapa baris pertama yang menggarisbawahi mundur pada implementasi asli dari banyak fungsi. Meskipun di dunia yang ideal, ini akan menjadi pendekatan yang lebih baik, jika Anda melihat beberapa tautan perf yang diberikan dalam slide ini , tidak sulit untuk menarik kesimpulan bahwa kualitas 'implementasi asli' tersebut sangat bervariasi dalam browser. ke-browser. Firefox sangat cepat di beberapa fungsi, dan di beberapa Chrome mendominasi. (Saya membayangkan akan ada beberapa skenario di mana IE akan mendominasi juga). Saya percaya bahwa lebih baik untuk memilih kode yang kinerjanya lebih konsisten di seluruh browser.

    Bacalah posting blog sebelumnya, dan alih-alih memercayainya untuk kepentingan itu, nilailah sendiri dengan menjalankan tolok ukur . Aku tertegun sekarang, melihat lodash melakukan 100-150% lebih cepat dari garis bawah bahkan sederhana , asli fungsi seperti Array.everydi Chrome!

  2. The tambahan di lodash juga cukup berguna.

  3. Adapun komentar Xananax yang sangat terangkat menyarankan kontribusi pada kode garis bawah: Selalu lebih baik untuk memiliki kompetisi yang BAIK , tidak hanya membuat inovasi terus berjalan, tetapi juga mendorong Anda untuk menjaga diri (atau perpustakaan Anda) dalam kondisi yang baik.

Berikut adalah daftar perbedaan antara lodash, dan garis bawahnya adalah pengganti drop-in untuk proyek garis bawah Anda.

kumarharsh
sumber
6
Dalam hal mana "konsistensi kecepatan" suatu nilai? Katakanlah, saya memiliki metode yang memiliki kecepatan 100% di FF dan di IE dan implementasi asli akan memiliki kecepatan 80% di IE dan 120% di FF (atau sebaliknya). Maka saya akan mengatakan itu akan baik untuk menggunakan implementasi asli di FF dan implementasi sendiri di IE. Saya tidak dapat membayangkan kasus apa pun, di mana saya akan mengatakan: Mari kita memperlambat FF hanya karena alasan untuk memiliki kecepatan yang sama di IE. Ukuran kode dan rawatan atau perlambatan rata-rata di semua browser akan menjadi argumen, tetapi konsistensi kecepatan?
stofl
2
Maksud saya, "kecepatan secara konsisten lebih cepat"
kumarharsh
1
Bagaimana dengan perbedaan ukuran? Katakanlah Anda membuat build khusus dengan lodash yang memiliki fungsi yang persis sama dengan garis bawah? Apakah ada perbedaan besar di antara mereka? Saya kira implementasi ulang menambah bobot ke situs.
F Lekschas
5
Saya cenderung mundur ke penerapan asli peramban hanya karena dalam kebanyakan kasus ini memiliki kinerja yang dapat diterima dan dapat ditingkatkan dengan pembaruan peramban tanpa khawatir untuk menjaga perpustakaan tetap mutakhir.
orad
3
@KumarHarsh Mungkin saya tidak mengucapkannya dengan baik. Maksud saya, saya cenderung menggunakan pustaka yang secara internal menggunakan fungsi-fungsi asli jika tersedia, daripada selalu lebih suka implementasinya sendiri.
orad
42

Ini tahun 2014 dan beberapa tahun sudah terlambat. Tetap saya pikir poin saya berpendapat:

IMHO diskusi ini menjadi tidak proporsional sedikit. Mengutip posting blog yang disebutkan di atas :

Sebagian besar pustaka utilitas JavaScript, seperti Underscore, Valentine, dan wu, mengandalkan "pendekatan ganda asli-pertama." Pendekatan ini lebih memilih implementasi asli, kembali ke JavaScript vanilla hanya jika setara asli tidak didukung. Tetapi jsPerf mengungkapkan tren yang menarik: cara paling efisien untuk beralih pada array atau koleksi mirip array adalah untuk menghindari implementasi asli sepenuhnya, memilih loop sederhana sebagai gantinya.

Seolah-olah "loop sederhana" dan "vanila Javascript" lebih asli daripada implementasi metode objek. Astaga ...

Pasti menyenangkan memiliki satu sumber kebenaran, tetapi tidak ada. Bahkan jika Anda diberitahu sebaliknya, tidak ada Dewa Vanilla, sayangku. Maafkan saya. Satu-satunya asumsi yang benar-benar berlaku adalah bahwa kita semua menulis kode Javascript yang bertujuan untuk berkinerja baik di semua browser utama, mengetahui bahwa mereka semua memiliki implementasi yang berbeda dari hal-hal yang sama. Itu menyebalkan untuk diatasi, untuk membuatnya lebih halus. Tapi itu premis, apakah Anda suka atau tidak.

Mungkin Anda semua sedang mengerjakan proyek skala besar yang membutuhkan kinerja twitterish sehingga Anda benar-benar melihat perbedaan antara 850.000 (garis bawah) vs 2.500.000 (pengalihan) pengulangan atas daftar per detik sekarang!

Untuk satu aku tidak. Maksud saya, saya mengerjakan proyek di mana saya harus mengatasi masalah kinerja, tetapi mereka tidak pernah diselesaikan atau disebabkan oleh Underscore maupun Lo-Dash. Dan kecuali saya memahami perbedaan nyata dalam implementasi dan kinerja (kita berbicara C + + sekarang) dari katakanlah loop atas iterable (objek atau array, jarang atau tidak!), Saya lebih suka tidak terganggu dengan klaim berdasarkan hasil platform patokan yang sudah disetujui .

Hanya perlu satu pembaruan tunggal katakanlah Badak untuk mengatur implementasi metode Array dengan cara yang tidak satu pun "metode loop abad pertengahan berkinerja lebih baik dan selamanya dan yang lainnya" imam dapat berdebat tentang fakta sederhana bahwa semua metode array tiba-tiba dalam FF jauh lebih cepat daripada brainfuck yang dikemukakannya. Man, Anda tidak bisa menipu lingkungan runtime Anda dengan menipu lingkungan runtime Anda! Pikirkan tentang itu ketika mempromosikan ...

sabuk utilitas Anda

... lain kali.

Jadi agar tetap relevan:

  • Gunakan Garis Bawah jika Anda suka kenyamanan tanpa mengorbankan ish asli.
  • Gunakan Lo-Dash jika Anda menyukai dan menyukai katalog fitur yang diperluas (penyalinan dalam dll.) Dan jika Anda sangat membutuhkan kinerja instan dan yang paling penting tidak keberatan menentukan alternatif segera setelah keaslian API asli workaurounds beralasan. Yang akan segera terjadi. Titik.
  • Bahkan ada solusi ketiga. DIY! Ketahui lingkungan Anda. Ketahui tentang inkonsistensi. Baca kode mereka ( John-David dan Jeremy ). Jangan gunakan ini atau itu tanpa bisa menjelaskan mengapa lapisan konsistensi / kompatibilitas sangat diperlukan dan meningkatkan alur kerja Anda atau meningkatkan kinerja aplikasi Anda. Sangat mungkin bahwa persyaratan Anda dipenuhi dengan polyfill sederhana yang bisa Anda tulis sendiri. Kedua perpustakaan itu hanyalah vanila biasa dengan sedikit gula. Mereka berdua hanya memperebutkan siapa yang menyajikan pie termanis . Tapi percayalah, pada akhirnya keduanya hanya memasak dengan air. Tidak ada Dewa Vanilla jadi tidak mungkin ada paus Vanilla, kan?

Pilih pendekatan apa pun yang paling sesuai dengan kebutuhan Anda. Seperti biasa. Saya lebih suka fallback pada implementasi aktual daripada curang runtime yang disarankan kapan saja tetapi bahkan itu tampaknya menjadi masalah selera saat ini. Tetap berpegang pada sumber daya berkualitas seperti http://developer.mozilla.com dan http://caniuse.com dan Anda akan baik-baik saja.

Lukas Bünger
sumber
Terima kasih telah mengirim Lukas. Bisakah built-in dapat dioptimalkan lebih lanjut? Saya mengumpulkan mereka memiliki kendala yang diberlakukan oleh standar yang mencegah mereka dari memiliki optimasi yang sebanding dengan perpustakaan, tetapi saya tidak tahu rinciannya begitu saja atau apakah ini benar atau tetap benar.
Brian M. Hunt
mis. "Dengan mengoptimalkan untuk use case 99%, metode fast.js bisa mencapai 5x lebih cepat dari padanan aslinya." - github.com/codemix/fast.js
Brian M. Hunt
1
Hai Brian, saya minta maaf jika ini menyesatkan, saya tidak bermaksud mengatakan bahwa perpustakaan itu tidak jauh lebih cepat dari padanan aslinya. Jika Anda sangat membutuhkan kinerja saat ini , Anda mungkin lebih baik dengan toolkit seperti LoDash atau fast.js karena mereka menyediakan implementasi metode standar yang lebih cepat. Tetapi jika Anda memilih untuk menggunakan pustaka yang tidak jatuh pada metode asli Anda mungkin hanya kehilangan optimasi kinerja di masa depan pada built-in. Browser pada akhirnya akan berkembang.
Lukas Bünger
4
Browser "pabrikan" mengalami kesulitan menjaga standar browser mereka patuh, apalagi performan. Sebagian besar peningkatan kinerja dalam implementasi asli adalah hasil dari perangkat keras yang lebih cepat. Alasan "implementasi asli akan menyusul" alasan telah ada selama bertahun-tahun. Tahun = keabadian di internet. JIKA implementasi asli pernah mengejar, perpustakaan akan diperbarui untuk menggunakannya. Itulah hal keren tentang open source. Jika aplikasi dev tidak memperbarui ke perpustakaan terbaru, aplikasi mereka tidak akan tiba-tiba melambat, itu tidak akan mempercepat.
Andrew Steitz
2
... tetapi jika Anda bertanya kepada mereka tentang Array.frommereka mungkin bahkan tidak akan tahu apa yang seharusnya dilakukan. Orang-orang "sabuk utilitas" JS tampaknya terlalu peduli dengan mempromosikan solusi oh-begitu-genial mereka sehingga mereka cenderung lupa bahwa dengan melakukan itu, mereka sebenarnya melemahkan proses standardisasi. Tidak perlu fitur menyebabkan tidak ada tekanan pada "produsen" browser. Fakta menyenangkan: 2 dari 4 browser utama didasarkan pada proyek sumber terbuka ( 1 , 2 ).
Lukas Bünger
20

Saya setuju dengan sebagian besar hal yang dikatakan di sini, tetapi saya hanya ingin menunjukkan argumen yang mendukung underscore.js: ukuran perpustakaan.

Khususnya jika Anda sedang mengembangkan aplikasi atau situs web yang sebagian besar ingin digunakan pada perangkat seluler, ukuran bundel yang dihasilkan dan efek pada waktu boot atau unduhan mungkin memiliki peran penting.

Sebagai perbandingan, ukuran ini adalah yang saya perhatikan dengan source-map-explorer setelah menjalankan layanan ion:

lodash: 523kB
underscore.js: 51.6kb

diedit Februari 2020 :

seseorang dapat menggunakan BundlePhobia untuk memeriksa ukuran Lo-Dash dan Underscore saat ini

David Dal Busco
sumber
1
Terima kasih Peter, ini adalah poin penting untuk dicatat di sini. Ada lebih banyak diskusi di tempat lain, termasuk: gist.github.com/alekseykulikov/5f4a6ca69e7b4ebed726 . (Jawaban ini dapat ditingkatkan dengan menghubungkan beberapa diskusi lainnya dan mengutip bit yang relevan) Perbedaan ukuran dapat dikurangi dengan memilih subbagian dari Lodash, ditambah Lodash yang mengguncang pohon. 🕷
Brian M. Hunt
Thx @ BrianM. Terima kasih atas balasan Anda, tidak tahu bahwa mungkin untuk memasukkan subbagian lodash, lihatlah. Baru-baru ini dengan ion-asli, Ionic mengambil jalan seperti itu juga untuk lib asli mereka, baik untuk dicatat bahwa lebih banyak yang lebih peduli tentang ukuran aplikasi
David Dal Busco
1
Saya bertanya-tanya dari mana Anda mendapatkan 523kB? lodash.com mengatakan hanya 24kB terkompresi. diunduh hanya 74kB
Martian2049
1
posting saya dibuat pada bulan april 2017. seperti yang saya katakan dalam komentar saya,source-map-explorer after running ionic serve
David Dal Busco
5
Pada bulan Maret 2018 - lodash.min.js adalah 72,5 kB dan garis bawah-min.js adalah 16,4 kB
Combine
10

Tidak yakin apakah itu yang dimaksud OP, tetapi saya menemukan pertanyaan ini karena saya sedang mencari daftar masalah yang harus saya ingat ketika bermigrasi dari garis bawah ke lodash.

Saya akan sangat menghargai jika seseorang memposting artikel dengan daftar lengkap perbedaan tersebut. Mari saya mulai dengan hal-hal yang telah saya pelajari dengan susah payah (yaitu, hal-hal yang membuat kode saya meledak pada produksi: /):

  • _.flattendi garis bawah dalam secara default dan Anda harus memberikan true sebagai argumen kedua untuk membuatnya dangkal. Dalam lodash itu dangkal secara default dan melewati true karena argumen kedua akan membuatnya mendalam! :)
  • _.lastdi garis bawah menerima argumen kedua yang memberitahu berapa banyak elemen yang Anda inginkan. Di lodashsana tidak ada opsi seperti itu. Anda dapat meniru ini dengan.slice
  • _.first (masalah yang sama)
  • _.templatedalam garis bawah dapat digunakan dalam banyak cara, salah satunya adalah menyediakan string dan data template dan mendapatkan HTMLkembali (atau setidaknya begitulah cara kerjanya beberapa waktu lalu). Di lodashAnda menerima fungsi yang Anda harus memberi makan dengan data.
  • _(something).map(foo)bekerja di garis bawah, tetapi di lodash saya harus menulis ulang _.map(something,foo). Mungkin itu hanya TypeScript-issue
qbolec
sumber
4
Dalam lodash, rantai melewati iterator yang malas, dan membutuhkan dan titik akhir seperti _(something).map(foo).value().
Brian M. Hunt
Ini semua bisa mengenai Anda jika Anda menggunakan Backbone Collection yang proksi panggilan ke pustaka ini - misalnya collection.first (5) tidak akan memberi Anda 5 elemen pertama, tetapi yang pertama :)
qbolec
8

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

Artikel terbaru membandingkan keduanya oleh Ben McCormick:

  1. API Lo-Dash adalah superset dari Underscore.

  2. Di bawah kap [Lo-Dash] telah sepenuhnya ditulis ulang.

  3. Lo-Dash jelas tidak lebih lambat dari Underscore.

  4. Apa yang ditambahkan Lo-Dash?

    • Peningkatan Kegunaan
    • Fungsionalitas Ekstra
    • Keuntungan Kinerja
    • Sintaks singkatan untuk chaining
    • Custom Builds hanya menggunakan apa yang Anda butuhkan
    • Versi semantik dan cakupan kode 100%
pilau
sumber
6

Saya hanya menemukan satu perbedaan yang akhirnya menjadi penting bagi saya. Versi non-garis bawah-kompatibel lodash ini _.extend()tidak tidak menyalin properti kelas-tingkat-ditentukan atau metode.

Saya telah membuat tes Jasmine di CoffeeScript yang menunjukkan ini:

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

Untungnya, lodash.underscore.jsmempertahankan perilaku Underscore menyalin segala sesuatu, yang untuk situasi saya adalah perilaku yang diinginkan.

Craig Walker
sumber
4

lodash punya _.mapValues()yang identik dengan underescore _.mapObject().

artknight
sumber
0

Sebagian besar garis bawah adalah subset dari lodash. Kadang-kadang, seperti garis bawah saat ini akan memiliki fungsi-fungsi kecil yang keren lodash tidak memiliki seperti mapObject. Yang ini menghemat banyak waktu dalam pengembangan proyek saya.

rashadb
sumber
pada saat itu, kami memiliki _.mapValues
crapthings
@crapthings - pada saat posting ini saya tahu tentang mayValues ​​dan mapKeys tetapi mereka tidak sama dengan mapObject. Mungkin ada kasus untuk menerapkan satu di atas yang lain tetapi mapObject adalah fungsi tersendiri.
rashadb
0

Mereka sangat mirip, dengan Lodash mengambil alih ...

Keduanya adalah perpustakaan utilitas yang membawa dunia utilitas dalam JavaScript ...

Sepertinya Lodash semakin diperbarui secara berkala sekarang, jadi lebih banyak digunakan dalam proyek terbaru ...

Juga Lodash tampaknya lebih ringan oleh beberapa KB ...

Keduanya memiliki api dan dokumen yang bagus, tetapi saya pikir Lodash lebih baik ...

Berikut adalah tangkapan layar untuk setiap dokumen untuk mendapatkan nilai pertama array ...

menggarisbawahi:

menggarisbawahi

Lodash: Lodash

Karena banyak hal dapat diperbarui dari waktu ke waktu, cukup periksa situs web mereka juga ...

Lodash

menggarisbawahi

Alireza
sumber