Che cosa è successo a Lodash _.pluck?


273

Una volta ho usato Lodash _.pluck... mi è piaciuto molto pizzicare ...

Rendendosi conto che Lodash non supporta più pluck(a partire da Lodash 4.x), faccio fatica a ricordare cosa usare invece ...

Sono andato da un dottore , ho cliccato su cmd-f, ho digitato "pluck", ma al mio povero amico abbandonato non è stata nemmeno data una menzione adeguata ... nemmeno un "è stato sostituito da" ...

Qualcuno può ricordarmi cosa dovrei usare invece?



Risposte:


411

Ah-ah! Il log delle modifiche di Lodash dice tutto ...

"Rimosso _.pluckin favore di _.mapcon stenografia ripetuta"

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
Non potrebbero semplicemente mantenere entrambi ...? Non vedo la necessità di rinominare le cose solo per motivi di rinominarle.
Kenny Worden,

17
Tuttavia non si tratta di "rinominare" - la mappa esisteva già - e pizzicare era semplicemente rimosso. La mappa sembra fornire funzionalità simili con la stessa firma dell'argomento.
Chris,

51
Perché diavolo dovrei desiderare due campanelli a casa mia? Se entrambi fanno la stessa cosa, risparmia alla gente la confusione e sbarazzati di uno. Secondo me, questo vale il cambiamento decisivo. Sbarazzati della spazzatura extra, semplifica l'API e le persone possono imparare a usare l'altro campanello. Non è più difficile da usare. Vorrei che più sviluppatori rimuovessero la cruft. +1 alla squadra lodash per aver introdotto il cambio di rottura (niente sarcasmo qui, davvero).
Landon Poch,

27
Rimuovere il pluck solo per i funzies significa che nessuno potrà mai aggiornare lodash in sicurezza. Non è che questo sia un linguaggio compilato ... Così fastidioso ...
Scott Stafford,

8
@ScottStafford è per questo che si chiama rottura cambiamento. Se non ti preoccupi di leggere il log delle modifiche quando cambiano le versioni principali, non preoccuparti di aggiornare le versioni principali. Puoi effettuare l'aggiornamento in sicurezza nella stessa versione principale.
oligofren,

71

Non è necessario _.mapo _.pluckpoiché ES6 è decollato.

Ecco un'alternativa usando ES6 JavaScript:

clips.map(clip => clip.id)


3
Non è necessario nemmeno ES6: Array.prototype.mapè nello standard ES5.1. Consulta il supporto del browser : risale al 2017, molto probabilmente!
davnicwil,

2
@davnicwil Array.prototype.mapè ES5.1, certo, ma la sintassi della freccia carina =>per le funzioni anonime non lo è. ;)
00dani,

3
@ 00Dani buon punto! I miei occhi saltarono completamente sulla grassa freccia. Ah bene, clips.map(function (clip) { return clip.id })immagino non sia poi così male ;-)
davnicwil il

11
Puoi effettivamente accorciarlo se usi ES6clips.map(({id}) => id)
Dr.Pil

1
Questo è molto vero, ma è utile sapere cosa è successo _.pluckpoiché alcuni progetti pre-ES6 potrebbero utilizzare i metodi di lodashe. :)
csalmeida,


2

Se vuoi davvero ricevere _.plucksupporto, puoi usare un mixin:

const _ = require("lodash")

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

Perché mapora supporta una stringa ("iteratore") come argomento anziché come funzione.


pluck! = map. Pluck ti lascia passare una stringa ed è lo stesso di darefunction (record) { return(record[that_string]) }
Brian Underwood il

@BrianUnderwood Grazie! Lo _.mapripeterò : può essere usato come equivalente funzionale se usato correttamente.
Richie Bendall,

-2

Oppure prova il metodo puro ES6 nonlodash come questo

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

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

Questo è inutilmente complicato, quando puoi farlo objects.map(object => object.a).
jkjustjoshing,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.