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ć?



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]

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)


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


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.


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, [])

Jest to niepotrzebnie skomplikowane, kiedy możesz objects.map(object => object.a).
jkjustjoshing
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.