2015-09-06 15 views
7

Với nhóm chức năng gạch dướiBởi, một mảng có thể được nhóm theo một trong các thuộc tính của phần tử của nó. Kết quả là một đối tượng có cặp khóa-giá trị như sau: group> fragment array fragment.lặp qua đối tượng được truy lục từ _.groupBy

var words = ['Hey', 'Hii', 'Salut'], 
    grouped = _.groupBy(words, 'length'); 

vẻ nhóm như thế này:

{ 
    '3': ['Hey', 'Hii'], 
    '5': ['Salut'] 
} 

Đó sẽ là một cách đơn giản và an toàn để lặp qua này, nói bắt đầu với chiều dài cao nhất tiếp theo là thấp nhất tiếp theo. Đây hoạt động:

_.each(_.toArray(grouped).reverse(), function(v) { 
    console.log(v); 
}); 

Nhưng tôi nghĩ rằng nó không phải là hoàn toàn chính xác, bởi vì đối tượng là danh sách không có thứ tự, và theo thứ tự đúng xảy ra ở đây chỉ là một cách tình cờ. Bất kỳ nhận xét nào về điều này?

Trả lời

5

Bạn đang ở trong đó bạn không thể dựa vào phân loại khóa đối tượng, bạn cần phải thực thi sắp xếp đúng. Với gạch dưới bạn có thể sử dụng _.sortBy:

_.each(
    _.sortBy(
     _.toArray(grouped), function (num) { 
      return num; 
     } 
    ).reverse(), 
    function (v) { 
     console.log(v); 
    } 
); 
4

này có thể được thực hiện trong js tinh khiết:

Object.keys(grouped) // get the keys as array 
    .sort(function(a, b) { return b - a; }) // sort them from highest to lowset 
    .forEach(function(lengthKey) { // iterate the sorted keys' array 
     console.log(grouped[lengthKey]); // get the words' arrays by key from grouped 
    }); 
Các vấn đề liên quan