O que aconteceu com o Lodash _.pluck?

273

Uma vez eu usei Lodash _.pluck... eu amei arrancar ...

Percebendo que o Lodash não é mais compatível pluck(a partir do Lodash 4.x), estou lutando para lembrar o que usar ...

Eu fui ao médico , pressionei cmd-f, digitei 'arrancar', mas meu pobre amigo abandonado nem sequer recebeu uma menção adequada ... nem mesmo um 'foi substituído por' ...

Alguém pode me lembrar o que devo usar?

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

Respostas:

411

Ah-ha! O Lodash Changelog diz tudo ...

"Removido _.pluckem favor de _.mapcom iteratee taquigrafia"

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
fonte
110
Eles não poderiam simplesmente manter os dois ...? Não vejo a necessidade de renomear as coisas apenas para renomeá-las.
precisa
17
Não é "renomear" - o mapa já existia - e a remoção foi simplesmente removida. Por acaso, o mapa fornece funcionalidade semelhante com a mesma assinatura de argumento.
Chris
51
Por que diabos eu iria querer duas campainhas na minha casa? Se os dois fizerem a mesma coisa, poupe as pessoas da confusão e se livre de uma. Na minha opinião, isso vale a pena mudar. Livre-se do lixo extra, simplifique a API e as pessoas podem aprender a usar a outra campainha. Não é mais difícil de usar. Eu gostaria que mais desenvolvedores removessem cruft. +1 à equipe do lodash por introduzir a mudança radical (sem sarcasmo aqui, na verdade).
quer
27
Remover o arranque apenas por funzies significa que ninguém pode atualizar com segurança o lodash. Não é como este é uma linguagem compilada ... Tão chato ...
Scott Stafford
8
@ScottStafford É por isso que é chamado de mudança de ruptura . Se você não se incomodar em ler o changelog quando as principais versões forem alteradas, não se preocupe em atualizar as principais versões. Você pode atualizar com segurança dentro da mesma versão principal.
oligofren
71

Não há necessidade _.mapou _.pluckdesde que o ES6 decolou.

Aqui está uma alternativa usando o ES6 JavaScript:

clips.map(clip => clip.id)

Michael J. Calkins
fonte
3
Nem o ES6 Array.prototype.mapé necessário : está no padrão ES5.1. Veja o suporte ao navegador - ele remonta tanto quanto alguém precisa se preocupar em 2017, provavelmente!
Davnicwil
2
@davnicwil Array.prototype.mapé ES5.1, com certeza, mas a sintaxe da seta atraente =>para funções anônimas não é. ;)
00dani 23/02
3
@ 00Dani bom ponto! Meus olhos saltaram completamente sobre a flecha gorda. Ah, bem, clips.map(function (clip) { return clip.id })ainda não é tão ruim eu acho ;-)
davnicwil
11
Você pode realmente torná-lo mais curto se utilizando ES6clips.map(({id}) => id)
Dr.Pil
1
Isso é verdade, mas é útil saber o que aconteceu com _.pluckalguns projetos anteriores ao ES6 que podem usar os métodos da lodashe. :)
csalmeida
18

Use em _.mapvez de _.pluck. Na versão mais recente, o _.pluckfoi removido.

Dheeraj Nalawade
fonte
2

Se você realmente deseja _.plucksuporte de volta, pode usar um mixin:

const _ = require("lodash")

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

Porque mapagora suporta uma string (o "iterador") como argumento em vez de uma função.

Richie Bendall
fonte
pluck! = map. Pluck permite que você passe em uma corda e é o mesmo que darfunction (record) { return(record[that_string]) }
Brian Underwood
@BrianUnderwood Thanks! Vou reiterar: _.mappode ser usado como um equivalente funcional se usado corretamente.
Richie Bendall
-2

Ou experimente o método ES6 nonlodash puro, como este

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

var objects = [{ 'a': 1 }, { 'a': 2 }];
objects.reduce(reducer, [])
PayteR
fonte
Isso é desnecessariamente complicado, quando você pode fazer objects.map(object => object.a).
jkjustjoshing