使用lodash按值对对象进行排序

时间:2016-08-03 20:50:19

标签: angularjs sorting object lodash

我正在尝试仅使用loadash按字母顺序对对象进行排序。我的示例对象是

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

我正在努力获得如下输出:

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

我尝试使用_.sortBy,但它似乎没有用。

2 个答案:

答案 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"]
]