LoDash: Nhận một mảng các giá trị từ một mảng các thuộc tính đối tượng


161

Tôi chắc chắn rằng nó ở đâu đó bên trong các tài liệu LoDash, nhưng dường như tôi không thể tìm thấy sự kết hợp phù hợp.

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

Câu trả lời:


320

Kể từ phiên bản v4.x, bạn nên sử dụng _.map:

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

theo cách này, nó tương ứng với phương thức Array.prototype.map nguyên gốc nơi bạn sẽ viết (cú pháp ES2015):

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

Trước v4.x bạn có thể sử dụng _.pluckcùng một cách:

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

cảm ơn tốt hơn nhiều so với_.toArray(_.mapValues(users, 'id'))
YarGnawh

1
Làm thế nào tôi có thể nhận được tên với id, ý tôi là làm thế nào chúng ta có thể tìm nạp nhiều hơn hai giá trị?
Giăng

6
@ John users.map(({ id, name }) => ({ id, name }))hoặc ít khó hiểu hơn users.map(user => ({ id: user.id, name: user.name })). Tương tự trong lodash : _.map(users, ({ id, name }) => ({ id, name })).
dfsq

@dfsq, đó là giải pháp tốt trong khi thêm các đối tượng vào mảng đầu ra. Cảm ơn!
Ted Corleone

17

Với JS thuần túy:

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

3
Bạn có thể đơn giản hóa điều này thành var userIds = users.map (obj => obj.id);
Kamil Naja

Hãy lên cấp của tôiusers.map(({id})=>id)
Artur Tagisow

15

Trong bản phát hành lodash mới, v4.0.0_.pluck đã được gỡ bỏ để ủng hộ_.map

Sau đó, bạn có thể sử dụng này:

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

Bạn có thể thấy trong Github Changelog


4

Và nếu bạn cần trích xuất một số thuộc tính từ mỗi đối tượng, thì

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

2

Cách đơn giản và thậm chí nhanh hơn để có được nó thông qua ES6

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

-2

Nếu bạn đang sử dụng javascript gốc thì bạn có thể sử dụng mã này -

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

    return obj.id;
})

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

OP rõ ràng yêu cầu một giải pháp Lodash.
Ariel Weinberger

-17

Điều này sẽ cung cấp cho bạn những gì bạn muốn trong một cửa sổ bật lên.

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

2
Nó lặp lại qua từng phần tử một mảng. Mảng là một cấu trúc dữ liệu của chỉ mục (es) với các giá trị trong đó từ một số loại dữ liệu (trong ví dụ này là các đối tượng). Các đối tượng chỉ có thể được truy cập bằng cách đánh giá các phần tử trong chỉ mục của mảng. Vòng lặp là cấu trúc đạt được điều này.
dùng1789573
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.