Apa yang terjadi dengan Lodash _.pluck?

273

Saya pernah menggunakan Lodash _.pluck... Saya suka memetik ...

Menyadari Lodash tidak lagi mendukung pluck(pada Lodash 4.x), saya berjuang untuk mengingat apa yang harus digunakan ...

Saya pergi ke dokumen , tekan cmd-f, diketik 'memetik', tetapi teman saya yang ditinggalkan miskin bahkan tidak diberi menyebutkan yang tepat ... bahkan tidak ada 'telah digantikan oleh' ...

Bisakah seseorang tolong ingatkan saya apa yang seharusnya saya gunakan?

sfletche
sumber
lodash.com/docs#pick
Daniel A. White
lodash.com/docs#result
Daniel A. White

Jawaban:

411

Ah-ha! The Lodash Changelog mengatakan itu semua ...

"Dihilangkan _.pluckdemi _.mapsteno iteratee"

var objects = [{ 'a': 1 }, { 'a': 2 }];

// in 3.10.1
_.pluck(objects, 'a'); // → [1, 2]
_.map(objects, 'a'); // → [1, 2]

// in 4.0.0
_.map(objects, 'a'); // → [1, 2]
sfletche
sumber
110
Tidak bisakah mereka mempertahankan keduanya ...? Saya tidak melihat kebutuhan untuk mengubah nama hal hanya demi mengganti nama mereka.
Kenny Worden
17
Itu bukan "mengubah nama" - peta sudah ada - dan pencabutan dihapus begitu saja. Peta kebetulan menyediakan fungsionalitas serupa dengan tanda tangan argumen yang sama.
Chris
51
Kenapa aku ingin dua bel pintu di rumahku? Jika mereka berdua melakukan hal yang sama, biarkan orang-orang kebingungan dan singkirkan. Menurut pendapat saya, ini layak untuk dilakukan perubahan. Singkirkan sampah tambahan, sederhanakan API, dan orang-orang dapat belajar menggunakan bel pintu lainnya. Ini tidak seperti itu lebih sulit untuk digunakan. Saya berharap lebih banyak pengembang akan menghapus cruft. Beri +1 kepada tim lodash untuk memperkenalkan perubahan yang melanggar (tidak ada sarkasme di sini, sungguh).
Landon Poch
27
Menghapus pemetik hanya untuk bersenang-senang berarti tidak ada yang bisa dengan aman memperbarui lodash. Bukannya ini adalah bahasa yang dikompilasi ... Sangat menjengkelkan ...
Scott Stafford
8
@ScottStafford Itu sebabnya ini disebut perubahan yang melanggar . Jika Anda tidak repot membaca changelog ketika versi utama berubah, maka jangan repot-repot memperbarui versi utama. Anda dapat memperbarui dengan aman dalam versi utama yang sama.
oligofren
71

Tidak perlu _.mapatau _.pluckkarena ES6 telah lepas landas.

Berikut ini alternatif menggunakan JavaScript ES6:

clips.map(clip => clip.id)

Michael J. Calkins
sumber
3
Bahkan tidak perlu untuk ES6: Array.prototype.mapada dalam standar ES5.1. Lihat dukungan browser - itu kembali sejauh yang perlu dikhawatirkan pada tahun 2017, kemungkinan besar!
davnicwil
2
@davnicwil Array.prototype.mapadalah ES5.1, tentu saja, tetapi sintaks panah lucu =>untuk fungsi anonim tidak. ;)
00dani
3
@ 00Dani poin bagus! Mataku benar-benar melewati panah gemuk. Ah well, clips.map(function (clip) { return clip.id })masih tidak terlalu buruk kurasa ;-)
davnicwil
11
Anda sebenarnya dapat membuatnya lebih pendek jika menggunakan ES6clips.map(({id}) => id)
Dr.Pil
1
Ini sangat benar tetapi berguna untuk mengetahui apa yang terjadi _.pluckkarena beberapa proyek ES6 pra mungkin menggunakan metode lodashe. :)
csalmeida
18

Gunakan _.mapsebagai ganti _.pluck. Dalam versi terbaru _.plucktelah dihapus.

Dheeraj Nalawade
sumber
2

Jika Anda benar-benar ingin _.pluckdukungan kembali, Anda dapat menggunakan mixin:

const _ = require("lodash")

_.mixin({
    pluck: _.map
})

Karena mapsekarang mendukung string ("iterator") sebagai argumen, bukan fungsi.

Richie Bendall
sumber
pluck! = map. Pluck memungkinkan Anda memberikan string dan sama seperti memberifunction (record) { return(record[that_string]) }
Brian Underwood
@BrianUnderwood Terima kasih! Saya akan mengulangi: _.mapdapat digunakan sebagai equalivent fungsional jika digunakan dengan benar.
Richie Bendall
-2

Atau coba metode nonlodash ES6 murni seperti ini

const reducer = (array, object) => {
  array.push(object.a)
  return array
}

var objects = [{ 'a': 1 }, { 'a': 2 }];
objects.reduce(reducer, [])
PayteR
sumber
Ini tidak perlu rumit, ketika Anda bisa melakukannya objects.map(object => object.a).
jkjustjoshing