2016-08-03 74 views
1

我試圖按照它的值使用loadash按字母順序排序對象。我的樣本對象是使用lodash按值排序對象

var object = {AB:'apple',AC:'cat', AD:'bannana', BA:'atom'}; 

和我想要得到的輸出如下:

Object = {AB: "apple", BA: "atom", AD: "bannana", AC: "cat"} 

我試着用_.sortBy,但似乎並不奏效。

回答

4

沒有這樣的東西排序對象的屬性。一個對象只是一組無序的密鑰< - >屬性對。

您可以使用對象的值創建一個數組並對它們進行排序。

正如lodash sortBy documentation所述,sortBy方法根據集合的值創建排序數組(即有序列表)。 我不確定它是否適合您的需求。請參閱下面的代碼片段,它使用您的對象作爲輸入值。

var object = {AB:'apple',AC:'cat', AD:'bannana', BA:'atom'}; 
 
var sortedValues = _.sortBy(object, function(value) { return value; }); 
 
console.log(sortedValues);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.14.1/lodash.min.js"></script>

編輯: 從你的評論,你需要獲得(鍵,值)對遍歷對的列表。 這是一個帶有排序數組的建議解決方案,用於ng-repeat指令中。

angular.module('app', []) 
 
    .controller('appCtrl', function($scope) { 
 

 
    var object = { 
 
     AB: 'apple', 
 
     AC: 'cat', 
 
     AD: 'bannana', 
 
     BA: 'atom' 
 
    }; 
 

 
    var pairs = _.map(object, function(value, key) { 
 
     return [key, value]; 
 
    }); 
 

 
    $scope.sortedPairs = _.sortBy(pairs, function(pair) { 
 
     return pair[1]; // ie. value 
 
    }); 
 
    });
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script> 
 
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.14.1/lodash.min.js"></script> 
 

 
<div ng-app="app"> 
 
    <ul ng-controller="appCtrl"> 
 
    <li ng-repeat="pair in sortedPairs"> 
 
     key: {{pair[0]}}, value: {{pair[1]}} 
 
    </li> 
 
    </ul> 
 
</div>

+0

那麼我怎樣才能得到它的關鍵,我需要使用這些鍵,值對ng重複在html – rUI7999

+0

感謝您的答案,可能是我可以將此數組轉換爲一個鍵值對,那麼我就可以得到我的答案。 – rUI7999

+0

您可以使用ng-repeat直接從sortedPairs數組中迭代,類似於'

  • key:{{pair [0]}},value:{{pair [1]} }
' – zoom

2

無法排序的對象,但你可以將其轉換爲對和sortBy的數組,那麼:

const sorted = _.sortBy(_.toPairs(object), 1) 

現在你已經有序陣列:

[ 
    ["AB", "apple"], 
    ["BA", "atom"], 
    ["AD", "bannana"], 
    ["AC", "cat"] 
]