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



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]

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)


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


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.


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

Esto es innecesariamente complicado, cuando puedes hacerlo objects.map(object => object.a).
jkjustjoshing
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.