2015-07-28 14 views
6

Tôi đang cố gắng tìm một cách ngắn gọn để phân vùng một mảng các đối tượng thành các nhóm của các mảng dựa trên một vị từ.Làm thế nào để phân vùng mảng thành nhiều nhóm bằng cách sử dụng Lodash?

var arr = [ 
    {id: 1, val: 'a'}, 
    {id: 1, val: 'b'}, 
    {id: 2, val: 'c'}, 
    {id: 3, val: 'a'} 
]; 

//transform to below 

var partitionedById = [ 
    [{id: 1, val: 'a'}, {id: 1, val:'b'}], 
    [{id: 2, val: 'c'}], 
    [{id: 3, val: 'a'} 
]; 

tôi thấy this question, mà đưa ra một cái nhìn tổng quan tốt sử dụng đồng bằng JS, nhưng tôi tự hỏi nếu có một cách ngắn gọn hơn để làm điều này bằng lodash? Tôi thấy partition function nhưng nó chỉ chia mảng thành 2 nhóm (cần phải là số phân vùng 'n'). Các groupBy nhóm nó vào một đối tượng bằng các phím, tôi đang tìm kiếm giống nhau nhưng trong một mảng (không có phím).

Có cách nào đơn giản hơn để lồng một vài chức năng lodash để đạt được điều này không?

Trả lời

8

Bạn có thể nhóm đầu tiên bởi id, mà sẽ mang lại một đối tượng mà các phím là những giá trị khác nhau của id và các giá trị là một mảng của tất cả các mục mảng với id đó, mà về cơ bản là những gì bạn muốn (sử dụng _.values() để có được chỉ các mảng giá trị):

// "regular" version 
var partitionedById = _.values(_.groupBy(arr, 'id')); 

// chained version 
var partitionedById = _(arr).groupBy('id').values().value(); 
+0

Cảm ơn! không nhận thức được hàm _.values ​​() –

Các vấn đề liên quan