【问题标题】:Sorting an object by its value using lodash使用 lodash 按对象的值对对象进行排序
【发布时间】:2026-01-12 08:55:01
【问题描述】:

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

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

我试图得到如下输出:

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

我尝试使用 _.sortBy,但它似乎不起作用。

【问题讨论】:

    标签: angularjs sorting object lodash


    【解决方案1】:

    没有对对象的属性进行排序这样的事情。对象只是一组无序的键 属性对。

    您可以使用对象的值创建一个数组并对其进行排序。

    正如 lodash sortBy documentation 中所解释的,sortBy 方法从集合的值创建一个排序数组(即有序列表)。 我不确定它是否符合您的需要。请参阅以下 sn-p,它使用您的对象作为输入值。

    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>

    编辑: 从您的评论中,您需要获取 (key, value) 对来遍历对列表。 这是一个在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>

    【讨论】:

    • 那么我怎样才能得到它的键,我需要使用那些键、值对来在 html 中重复 ng-repeat
    • 感谢您的回答,也许我可以将此数组转换为键值对,这样我就可以得到答案了。
    • 您可以使用 ng-repeat 直接从 sortedPairs 数组中进行迭代,例如 &lt;ul&gt;&lt;li ng-repeat="pair in sortedPairs"&gt;key: {{pair[0]}}, value: {{pair[1]}}&lt;/li&gt;&lt;/ul&gt;
    • 我使用 ng-repeat 指令在我的答案中编辑了 sn-p。
    • 工作就像一个魅力,谢谢 bud :)
    【解决方案2】:

    您不能对对象进行排序,但可以将其转换为对数组和 sortBy 然后:

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

    现在您已经订购了数组:

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

    【讨论】:

      最近更新 更多