LoDash: Ruft ein Array von Werten aus einem Array von Objekteigenschaften ab

161

Ich bin sicher, dass es irgendwo in den LoDash-Dokumenten ist, aber ich kann anscheinend nicht die richtige Kombination finden.

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'));
YarGnawh
quelle

Antworten:

320

Seit Version v4.x sollten Sie Folgendes verwenden _.map:

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

Auf diese Weise entspricht es der nativen Array.prototype.map- Methode, in die Sie schreiben würden (ES2015-Syntax):

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

Vor v4.x können Sie Folgendes tun _.pluck:

_.pluck(users, 'id'); // [12, 14, 16, 18]
dfsq
quelle
_.toArray(_.mapValues(users, 'id'))
Vielen
1
Wie kann ich einen Namen mit ID erhalten? Ich meine, wie können wir mehr als zwei Werte abrufen?
John
6
@ John users.map(({ id, name }) => ({ id, name }))oder weniger kryptisch users.map(user => ({ id: user.id, name: user.name })). Gleiches in lodash : _.map(users, ({ id, name }) => ({ id, name })).
dfsq
@dfsq, es ist eine gute Lösung beim Hinzufügen von Objekten zum Ausgabearray. Vielen Dank!
Ted Corleone
17

Mit reinem JS:

var userIds = users.map( function(obj) { return obj.id; } );
c-smile
quelle
3
Sie können dies in var userIds = users.map (obj => obj.id) vereinfachen.
Kamil Naja
Steig auf mein Levelusers.map(({id})=>id)
Artur Tagisow
15

In der neuen lodash-Version wurde v4.0.0 _.pluck zugunsten von entfernt_.map

Dann können Sie dies verwenden:

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

Sie können in Github Changelog sehen

iarroyo
quelle
4

Und wenn Sie mehrere Eigenschaften aus jedem Objekt extrahieren müssen, dann

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

Einfacher und noch schnellerer Weg, um es über ES6 zu bekommen

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

Wenn Sie natives Javascript verwenden, können Sie diesen Code verwenden -

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

    return obj.id;
})

console.log(ids); //[12, 14, 16, 18]
Pankaj Bisht
quelle
Das OP forderte ausdrücklich eine Lodash-Lösung.
Ariel Weinberger
-17

Dies gibt Ihnen, was Sie in einem Popup wollen.

for(var i = 0; i < users.Count; i++){
   alert(users[i].id);  
}
user1789573
quelle
2
Es geht darum, das Array einzeln zu durchlaufen. Ein Array ist eine Datenstruktur von Indizes mit Werten aus einem Datentyp (in diesem Beispiel sind es Objekte). Auf die Objekte kann nur zugegriffen werden, indem die Elemente im Index des Arrays ausgewertet werden. Die Schleife ist die Struktur, die dies erreicht.
user1789573