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

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]

_.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; } );

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


4

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

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

2

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

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

-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]

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);  
}

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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.