2016-08-03 199 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"] 
]