Co się stało z Lodash _.pluck?

273

Kiedyś użyłem Lodash _.pluck... Uwielbiałem skubać ...

Zdając sobie sprawę, że Lodash nie obsługuje już pluck(od Lodash 4.x), staram się pamiętać, zamiast tego użyć ...

Poszedłem do doktorów , nacisnąłem cmd-f, napisałem „zrywać”, ale mój biedny porzucony przyjaciel nie otrzymał nawet właściwej wzmianki… nawet „nie zastąpiono”…

Czy ktoś może mi przypomnieć, czego powinienem użyć?

sfletche
źródło
lodash.com/docs#pick
Daniel A. White
lodash.com/docs#result
Daniel A. White

Odpowiedzi:

411

Ah-ha! Lodash zmian mówi wszystko ...

„Usunięto _.pluckna rzecz _.mapskrótu iteracyjnego”

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
źródło
110
Czy nie mogliby po prostu zatrzymać obu ...? Nie widzę potrzeby zmiany nazw rzeczy tylko ze względu na ich zmianę.
Kenny Worden
17
Nie jest to jednak „zmiana nazwy” - mapa już istniała - i skubanie zostało po prostu usunięte. Mapa po prostu zapewnia podobną funkcjonalność z tym samym podpisem argumentu.
Chris,
51
Dlaczego do diabła miałbym chcieć dwa dzwonki do drzwi w moim domu? Jeśli oboje robią to samo, oszczędzaj ludziom zamieszania i pozbądź się jednego. Moim zdaniem jest to warte przełomowej zmiany. Pozbądź się dodatkowych śmieci, uprość interfejs API, a ludzie będą mogli nauczyć się korzystać z drugiego dzwonka do drzwi. Nie jest trudniejszy w użyciu. Chciałbym, aby więcej programistów usunęło cruft. +1 dla zespołu lodash za wprowadzenie przełomowej zmiany (naprawdę nie ma tutaj sarkazmu).
Landon Poch
27
Usunięcie oskubu tylko dla grzybów oznacza, że ​​nikt nigdy nie może bezpiecznie zaktualizować lodash. To nie tak, że jest to skompilowany język ... Tak denerwujące ...
Scott Stafford,
8
@ScottStafford Dlatego nazywa się to przełomową zmianą. Jeśli nie przejmujesz się czytaniem dziennika zmian przy zmianie głównych wersji, nie zawracaj sobie głowy aktualizowaniem głównych wersji. Możesz bezpiecznie aktualizować w tej samej głównej wersji.
oligofren,
71

Nie ma potrzeby _.mapani _.pluckod momentu startu ES6.

Oto alternatywa dla JavaScript ES6:

clips.map(clip => clip.id)

Michael J. Calkins
źródło
3
Nie potrzebujesz nawet ES6: Array.prototype.mapjest w standardzie ES5.1. Zobacz obsługę przeglądarki - to sięga tak daleko, jak to tylko możliwe, w 2017 roku!
davnicwil
2
@davnicwil Array.prototype.mapto ES5.1, jasne, ale składnia uroczych strzałek =>dla funkcji anonimowych nie jest. ;)
00dani
3
@ 00Dani dobry punkt! Moje oczy całkowicie przeskoczyły nad grubą strzałą. Ach cóż, clips.map(function (clip) { return clip.id })chyba nie jest tak źle ;-)
davnicwil
11
Możesz go skrócić, jeśli używasz ES6clips.map(({id}) => id)
Dr.Pil
1
Jest to bardzo prawdziwe, ale warto wiedzieć, co się stało, _.pluckponieważ niektóre projekty sprzed ES6 mogą korzystać z metod lodashe. :)
csalmeida
18

Użyj _.mapzamiast _.pluck. W najnowszej wersji _.pluckzostał usunięty.

Dheeraj Nalawade
źródło
2

Jeśli naprawdę chcesz _.pluckodzyskać wsparcie, możesz użyć mixin:

const _ = require("lodash")

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

Ponieważ mapteraz obsługuje ciąg („iterator”) jako argument zamiast funkcji.

Richie Bendall
źródło
pluck! = map. Oskub pozwala przepuścić sznurek i jest tym samym, co dawaniefunction (record) { return(record[that_string]) }
Brian Underwood
@BrianUnderwood Thanks! _.mapPowtórzę : może być użyty jako równoważnik funkcjonalny, jeśli zostanie użyty poprawnie.
Richie Bendall
-2

Lub wypróbuj taką czystą metodę nonlodash ES6

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

var objects = [{ 'a': 1 }, { 'a': 2 }];
objects.reduce(reducer, [])
PayteR
źródło
Jest to niepotrzebnie skomplikowane, kiedy możesz objects.map(object => object.a).
jkjustjoshing