我正在尝试仅使用loadash按字母顺序对对象进行排序。我的示例对象是
var object = {AB:'apple',AC:'cat', AD:'bannana', BA:'atom'};
我正在努力获得如下输出:
Object = {AB: "apple", BA: "atom", AD: "bannana", AC: "cat"}
我尝试使用_.sortBy,但它似乎没有用。
答案 0 :(得分: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>
答案 1 :(得分:2)
您无法对对象进行排序,但您可以将其转换为对数组,然后排序:
const sorted = _.sortBy(_.toPairs(object), 1)
现在你已经订购了数组:
[
["AB", "apple"],
["BA", "atom"],
["AD", "bannana"],
["AC", "cat"]
]