¿Qué pasó con Lodash _.pluck?

273

Una vez usé Lodash _.pluck... Me encantó desplumar ...

Al darme cuenta de que Lodash ya no es compatible pluck(a partir de Lodash 4.x), me cuesta recordar qué usar en su lugar ...

Fui a los documentos , presioné cmd-f, escribí 'arrancar', pero mi pobre amigo abandonado ni siquiera recibe una mención adecuada ... ni siquiera un 'ha sido reemplazado por' ...

¿Puede alguien por favor recordarme lo que se supone que debo usar en su lugar?

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

Respuestas:

411

Ah-ha! El registro de cambios de Lodash lo dice todo ...

"Eliminado _.plucka favor de _.maptaquigrafía 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
fuente
110
¿No podrían simplemente quedarse con ambos ...? No veo la necesidad de cambiar el nombre de las cosas solo por cambiarles el nombre.
Kenny Worden
17
Sin embargo, no es "renombrar", el mapa ya existía, y simplemente se eliminó el desplume. El mapa simplemente proporciona una funcionalidad similar con la misma firma de argumento.
Chris
51
¿Por qué demonios querría dos timbres en mi casa? Si ambos hacen lo mismo, evite la confusión a las personas y elimine una. En mi opinión, vale la pena el cambio radical. Deshágase de la basura adicional, simplifique la API y las personas pueden aprender a usar el otro timbre. No es que sea más difícil de usar. Deseo que más desarrolladores eliminen cruft. +1 al equipo lodash por introducir el cambio radical (no hay sarcasmo aquí, de verdad).
Landon Poch el
27
Eliminar el pluck solo por diversión significa que nadie puede actualizar lodash de manera segura. No es como si fuera un lenguaje compilado ... Tan molesto ...
Scott Stafford
8
@ScottStafford Es por eso que se llama una ruptura cambio. Si no se molesta en leer el registro de cambios cuando cambian las versiones principales, no se moleste en actualizar las versiones principales. Puede actualizar de forma segura dentro de la misma versión principal.
oligofren
71

No es necesario _.mapo _.pluckdesde que ES6 ha despegado.

Aquí hay una alternativa usando ES6 JavaScript:

clips.map(clip => clip.id)

Michael J. Calkins
fuente
3
Ni siquiera necesita ES6: Array.prototype.mapestá en el estándar ES5.1. Consulte el soporte del navegador : ¡probablemente se remonta a lo que todos deben preocuparse en 2017!
davnicwil
2
@davnicwil Array.prototype.mapes ES5.1, claro, pero la linda sintaxis de flecha =>para funciones anónimas no lo es. ;)
00dani
3
@ 00Dani buen punto! Mis ojos saltaron por completo sobre la flecha gorda. Ah bueno, clips.map(function (clip) { return clip.id })todavía no es tan malo, supongo ;-)
davnicwil
11
En realidad, puede clips.map(({id}) => id)
acortarlo
1
Esto es muy cierto, pero es útil saber qué sucedió, _.pluckya que algunos proyectos previos a ES6 podrían hacer uso de los métodos de lodashe. :)
csalmeida
18

Usar en _.maplugar de _.pluck. En la última versión _.pluckse ha eliminado.

Dheeraj Nalawade
fuente
2

Si realmente quieres _.plucksoporte, puedes usar un mixin:

const _ = require("lodash")

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

Porque mapahora admite una cadena (el "iterador") como argumento en lugar de una función.

Richie Bendall
fuente
pluck! = map. Pluck te permite pasar una cuerda y es lo mismo que darfunction (record) { return(record[that_string]) }
Brian Underwood
@BrianUnderwood ¡Gracias! Reitero: _.mappuede usarse como un equivalente funcional si se usa correctamente.
Richie Bendall
-2

O prueba el método puro ES6 no lodash como este

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

var objects = [{ 'a': 1 }, { 'a': 2 }];
objects.reduce(reducer, [])
Pagador
fuente
Esto es innecesariamente complicado, cuando puedes hacerlo objects.map(object => object.a).
jkjustjoshing