Lodash _.pluckはどうなりましたか?


273

私はかつてロダッシュを使っていました_.pluck...

pluck(Lodash 4.x以降)Lodashがサポートしなくなったことを認識して、代わりに何を使用するかを覚えるのに苦労しています...

私はドキュメントに行き、cmd-fを押し、「pluck」と入力しましたが、私の捨てられた貧しい友人には適切な言及さえ与えられていません...「に置き換えられた」...

誰かが私が代わりに使用することになっているものを思い出させてくれますか?



回答:


411

あはは!Lodash変更履歴はそれをすべて言います...

「iteratee省略表記_.pluckを使用_.mapして削除されました」

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
彼らは単に両方を維持することはできません...?名前を変更するためだけに名前を変更する必要があるとは思いません。
ケニーワーデン2016年

17
ただし、「名前を変更する」ことはできません。マップはすでに存在し、pluckは削除されました。マップはたまたま同じ引数シグネチャで同様の機能を提供します。
Chris

51
なぜ私は家に2つのドアベルが必要なのでしょうか。両方が同じことをする場合、混乱を避けて片方を取り除く。私の意見では、これは重大な変更の価値があります。余分なジャンクを取り除き、APIを簡素化すれば、他のドアベルの使い方を学ぶことができます。使いづらいというわけではありません。もっと多くの開発者が残骸を取り除くことを望みます。破壊的な変更を導入するためにlodashチームに+1します(実際には皮肉はありません)。
Landon Poch

27
ファンキーのためにpluckを削除すると、誰も安全にlodashを更新できなくなります。これはコンパイルされた言語のようではありません...とても面倒です...
スコットスタッフォード

8
@ScottStaffordそれが、重大変更と呼ばれている理由です。メジャーバージョンが変更されたときに変更ログを読みたくない場合は、メジャーバージョンを更新する必要はありません。同じメジャーバージョン内で安全に更新できます。
オリゴフレン2017

71

必要性がない_.mapか、_.pluck離陸したES6以降は。

ES6 JavaScriptを使用した代替方法を次に示します。

clips.map(clip => clip.id)


3
ES6は必要ありませんArray.prototype.map。ES5.1標準に含まれています。ブラウザのサポートをご覧ください-おそらく2017年に誰もが心配する必要がある限り遡ります。
davnicwil 2017

2
@davnicwil Array.prototype.mapは確かにES5.1 ですが、=>無名関数のかわいい矢印構文はそうではありません。;)
00dani

3
@ 00ダニ良いポイント!私の目は太い矢を完全に飛び越えました。ああ、clips.map(function (clip) { return clip.id })それでも悪くないと思います;-)
davnicwil

11
ES6を使用している場合は、実際に短くすることができますclips.map(({id}) => id)
Dr.Pil

1
これは非常に当てはまりますが、_.pluckES6以前の一部のプロジェクトではlodasheのメソッドを使用している可能性があるため、何が起こったのかを知るのに役立ちます。:)
csalmeida 2017年


2

本当に_.pluckサポートが必要な場合は、ミックスインを使用できます。

const _ = require("lodash")

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

のでmap、今ではなく、関数の引数として文字列(「イテレータ」)をサポートしています。


pluck!= map。プラックは文字列を渡すことができます。これは与えることと同じですfunction (record) { return(record[that_string]) }
ブライアンアンダーウッド

@BrianUnderwoodありがとう!繰り返します_.mapが、正しく使用すれば、機能的なイコールとして使用できます。
リッチーベンドール

-2

または、このような純粋なES6 nonlodashメソッドを試してください

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

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

できる場合、これは不必要に複雑ですobjects.map(object => object.a)
jkjustjoshing
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.