Was ist mit Lodash passiert?

273

Ich habe einmal Lodash benutzt _.pluck... ich habe das Zupfen geliebt ...

Da Lodash nicht mehr unterstützt wird pluck(ab Lodash 4.x), fällt es mir schwer, mich daran zu erinnern, was ich stattdessen verwenden soll ...

Ich ging zu den Dokumenten , drückte cmd-f, tippte 'zupfen' ein, aber mein armer verlassener Freund wird nicht einmal richtig erwähnt ... nicht einmal ein 'wurde ersetzt durch' ...

Kann mich bitte jemand daran erinnern, was ich stattdessen verwenden soll?

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

Antworten:

411

Ah-ha! Der Lodash Changelog sagt alles ...

„Entfernt _.pluckzugunsten der _.mapmit iteratee Kurzschrift“

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
quelle
110
Könnten sie nicht einfach beide behalten ...? Ich sehe keine Notwendigkeit, Dinge umzubenennen, nur um sie umzubenennen.
Kenny Worden
17
Es wird jedoch nicht "umbenannt" - die Karte war bereits vorhanden - und das Zupfen wurde einfach entfernt. Map bietet zufällig ähnliche Funktionen mit derselben Argumentsignatur.
Chris
51
Warum zum Teufel sollte ich zwei Türklingeln an meinem Haus haben wollen? Wenn beide dasselbe tun, ersparen Sie den Menschen die Verwirrung und beseitigen Sie eine. Meiner Meinung nach ist dies die bahnbrechende Änderung wert. Beseitigen Sie zusätzlichen Müll, vereinfachen Sie die API, und die Benutzer können lernen, die andere Türklingel zu verwenden. Es ist nicht schwieriger zu bedienen. Ich wünschte, mehr Entwickler würden Cruft entfernen. +1 an das lodash-Team für die Einführung des bahnbrechenden Wechsels (hier eigentlich kein Sarkasmus).
Landon Poch
27
Das Entfernen des Zupfens nur für Funzies bedeutet, dass niemand lodash jemals sicher aktualisieren kann. Es ist nicht so, dass dies eine kompilierte Sprache ist ... So nervig ...
Scott Stafford
8
@ScottStafford Deshalb wird es eine bahnbrechende Veränderung genannt. Wenn Sie das Änderungsprotokoll nicht lesen, wenn sich Hauptversionen ändern, müssen Sie die Hauptversionen nicht aktualisieren. Sie können sicher innerhalb derselben Hauptversion aktualisieren.
Oligofren
71

Es besteht keine Notwendigkeit für _.mapoder _.pluckseit ES6 gestartet ist.

Hier ist eine Alternative mit ES6-JavaScript:

clips.map(clip => clip.id)

Michael J. Calkins
quelle
3
ES6 wird nicht einmal benötigt: Array.prototype.mapist im ES5.1-Standard enthalten. Siehe Browser-Unterstützung - es geht zurück, soweit sich 2017 jemand Sorgen machen muss, höchstwahrscheinlich!
Davnicwil
2
@davnicwil Array.prototype.mapist zwar ES5.1, die niedliche Pfeilsyntax =>für anonyme Funktionen jedoch nicht. ;)
00dani
3
@ 00Dani guter Punkt! Meine Augen hüpften vollständig über den fetten Pfeil. clips.map(function (clip) { return clip.id })
Na ja
11
Sie können es tatsächlich kürzer machen, wenn Sie ES6clips.map(({id}) => id)
Dr.Pil
1
Dies ist sehr richtig, aber es ist nützlich zu wissen, was passiert ist, _.pluckda einige Projekte vor ES6 möglicherweise die Methoden von lodashe verwenden. :)
Csalmeida
18

Verwenden Sie _.mapanstelle von _.pluck. In der neuesten Version wurde das _.pluckentfernt.

Dheeraj Nalawade
quelle
2

Wenn Sie wirklich wieder _.pluckUnterstützung benötigen, können Sie ein Mixin verwenden:

const _ = require("lodash")

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

Denn mapunterstützt jetzt einen String (den "Iterator") als Argument anstelle einer Funktion.

Richie Bendall
quelle
pluck! = map. Zupfen lässt Sie in einer Schnur passieren und ist das gleiche wie Gebenfunction (record) { return(record[that_string]) }
Brian Underwood
@BrianUnderwood Danke! Ich wiederhole: _.mapKann bei korrekter Verwendung als funktionales Äquivalent verwendet werden.
Richie Bendall
-2

Oder versuchen Sie es mit einer reinen ES6-Nonlodash-Methode wie dieser

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

var objects = [{ 'a': 1 }, { 'a': 2 }];
objects.reduce(reducer, [])
PayteR
quelle
Dies ist unnötig kompliziert, wenn Sie dies tun können objects.map(object => object.a).
jkjustjoshing