LoDash:オブジェクトプロパティの配列から値の配列を取得します


161

LoDashドキュメントのどこかにあると確信していますが、適切な組み合わせを見つけることができません。

var users = [{
      id: 12,
      name: Adam
   },{
      id: 14,
      name: Bob
   },{
      id: 16,
      name: Charlie
   },{
      id: 18,
      name: David
   }
]

// how do I get [12, 14, 16, 18]
var userIds = _.map(users, _.pick('id'));

回答:


321

バージョンv4.x以降、次を使用する必要があります_.map

_.map(users, 'id'); // [12, 14, 16, 18]

このように、ネイティブのArray.prototype.mapメソッドに対応しています(ES2015構文)。

users.map(user => user.id); // [12, 14, 16, 18]

v4.xより前は_.pluck、同じ方法を使用できました。

_.pluck(users, 'id'); // [12, 14, 16, 18]

おかげでより良いよりも_.toArray(_.mapValues(users, 'id'))
YarGnawh

1
IDで名前を取得するにはどうすればよいですか、つまり、3つ以上の値をフェッチするにはどうすればよいですか?
John

6
@ジョンusers.map(({ id, name }) => ({ id, name }))以下の不可解なusers.map(user => ({ id: user.id, name: user.name }))。ロダッシュでも同じ:_.map(users, ({ id, name }) => ({ id, name }))
dfsq

@dfsq、オブジェクトを出力配列に追加するときの良い解決策です。ありがとう!
Ted Corleone

17

純粋なJSの場合:

var userIds = users.map( function(obj) { return obj.id; } );

3
これをvar userIds = users.map(obj => obj.id);に簡略化できます。
Kamil Naja

レベルアップusers.map(({id})=>id)
Artur Tagisow

15

新しいlodashリリースでは、v4.0.0 _.pluckが削除されました。_.map

次に、これを使用できます:

_.map(users, 'id'); // [12, 14, 16, 18]

あなたはGithub Changelogで見ることができます


4

そして、各オブジェクトからいくつかのプロパティを抽出する必要がある場合は、

let newArr = _.map(arr, o => _.pick(o, ['name', 'surname', 'rate']));

2

ES6経由で取得するためのシンプルでさらに高速な方法

let newArray = users.flatMap(i => i.ID) // -> [ 12, 13, 14, 15 ]

-2

ネイティブJavaScriptを使用している場合は、このコードを使用できます-

let ids = users.map(function(obj, index) {

    return obj.id;
})

console.log(ids); //[12, 14, 16, 18]

OPは明示的にLodashソリューションを要求しました。
Ariel Weinberger

-17

これにより、ポップアップに必要なものが表示されます。

for(var i = 0; i < users.Count; i++){
   alert(users[i].id);  
}

2
一度に1つの要素で配列をループします。配列は、いくつかのデータ型(この例ではオブジェクト)からの値を含むインデックスのデータ構造です。オブジェクトは、配列のインデックスの要素を評価することによってのみアクセスできます。ループはこれを実現する構造です。
user1789573 2015
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.