Lodash _.pluck'a ne oldu?


273

Bir zamanlar Lodash'ı kullandım _.pluck... Koparmayı sevdim ...

Lodash'ın artık desteklemediğini pluck( Lodash 4.x'ten itibaren) fark etmek yerine, ne kullanacağımı hatırlamakta zorlanıyorum ...

Dokümanlara gittim , cmd-f'ye çarptım, 'koparma' yazdım, ama terk edilmiş zavallı arkadaşım bile doğru bir söz bile vermiyor ... bir 'yerine' bile konmadı ...

Birisi bana bunun yerine ne kullanmam gerektiğini hatırlatabilir mi?



Yanıtlar:


411

Ah-ha! Lodash Değişiklikler her şeyi söylüyor ...

" Stenografi yineleyici _.plucklehine kaldırıldı _.map"

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]

110
İkisini birden tutamazlar mı ...? Bir şeyleri sadece yeniden adlandırmak adına yeniden adlandırma gereği görmüyorum.
Kenny Worden

17
Yine de "yeniden adlandırılmıyor" - harita zaten vardı - ve koparma kaldırıldı. Harita sadece aynı argüman imzası ile benzer işlevler sağlar.
Chris

51
Neden evimde iki kapı zili isteyeyim ki? Her ikisi de aynı şeyi yaparsa, insanlara karışıklığı bozun ve onlardan kurtulun. Bence bu kırılmaya değer. Ekstra önemsiz şeylerden kurtulun, API'yi basitleştirin ve insanlar diğer kapı zilini kullanmayı öğrenebilir. Kullanması daha zor gibi değil. Keşke daha fazla geliştiricinin ham petrolü ortadan kaldırmasını diliyorum. Kırılma değişimini tanıttığı için lodash ekibine +1 (burada gerçekten alay etme yok).
Landon Poch

27
Sadece funzies için koparmayı kaldırmak, kimsenin lodash'ı güvenle güncelleyemeyeceği anlamına gelir. Bu derlenmiş bir dil gibi değil ... Çok sinir bozucu ...
Scott Stafford

8
@ScottStafford Bu yüzden buna kırılma değişikliği deniyor . Büyük sürümler değiştiğinde changelog'u okuma zahmetine girmezseniz, büyük sürümleri güncellemekten çekinmeyin. Aynı ana sürümde güvenle güncelleyebilirsiniz.
oligofren

71

ES6'nın başlamasından bu yana _.mapveya _.pluckbu yana bir ihtiyaç yoktur .

İşte ES6 JavaScript kullanan bir alternatif:

clips.map(clip => clip.id)


3
ES6'ya bile gerek yok: Array.prototype.mapES5.1 standardında. Tarayıcı desteğine bakın - 2017'de herkesin endişelenmesi gerektiği kadar geriye gidiyor!
davnicwil

2
@davnicwil Array.prototype.mapES5.1, tabii, ama =>anonim işlevler için sevimli ok sözdizimi değil. ;)
00dani

3
@ 00Dani iyi bir nokta! Gözlerim tamamen şişman okun üzerinden atladı. Ah, clips.map(function (clip) { return clip.id })hala o kadar da kötü değil sanırım ;-)
davnicwil

11
ES6clips.map(({id}) => id)
Dr.Pil

1
Bu çok doğrudur, ancak _.pluckbazı ES6 öncesi projeleri lodashe'nin yöntemlerinden faydalanabileceğinden neler olduğunu bilmek yararlıdır . :)
csalmeida


2

Gerçekten _.pluckdestek istiyorsanız, bir mixin kullanabilirsiniz:

const _ = require("lodash")

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

Çünkü mapartık işlev yerine argüman olarak bir dizeyi ("iterator") desteklemektedir.


pluck! = map. Pluck bir ipte geçmenizi sağlar ve vermekle aynıdırfunction (record) { return(record[that_string]) }
Brian Underwood

@BrianUnderwood Teşekkürler! Ben yinelemek gerekir: _.mapUsulüne uygun olarak kullanıldığında fonksiyonel equalivent olarak kullanılabilir.
Richie Bendall

-2

Ya da bunun gibi saf ES6 nonlodash yöntemini deneyin

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

var objects = [{ 'a': 1 }, { 'a': 2 }];
objects.reduce(reducer, [])

Yapabileceğiniz zaman bu gereksiz bir şekilde karmaşıktır objects.map(object => object.a).
jkjustjoshing
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.