Javascript 按对象的ng repeat(键、值)对中的值排序

Javascript 按对象的ng repeat(键、值)对中的值排序,javascript,angularjs,sorting,Javascript,Angularjs,Sorting,我是安格拉斯的新手。使用API,我获得了与运动相关的键值对 $scope.sports = { 1: "Soccer", 2: "Tennis", 3: "Basketball" ... }; 是否可以按运动项目名称对项目进行排序: <ul> <li ng-repeat="(id, value) in sports | orderBy:'value'"> <a ng-href='/page/{{id}}'>{{value}}</a>

我是安格拉斯的新手。使用API,我获得了与运动相关的键值对

$scope.sports = { 1: "Soccer", 2: "Tennis", 3: "Basketball" ... };
是否可以按运动项目名称对项目进行排序:

<ul>
  <li ng-repeat="(id, value) in sports | orderBy:'value'">
      <a ng-href='/page/{{id}}'>{{value}}</a>
  </li>
 </ul>
我试图在控制器中使用underline.js对它们进行排序(我在不同的视图中使用了它),但随后我丢失了有关ID的信息。就像这里:

如何处理AngularJs中的orderBy值,其中有(键,值)对?

正如所说,orderBy需要一个
数组作为输入,而不是一个对象

因此,解决方案是将对象转换为数组。您可以使用
reduce
方法通过将回调函数作为
参数传递来实现这一点

$scope.sports = Object.keys($scope.sports).reduce(function(arr,key){
    arr.push({id: key, value: $scope.sports[key]})
    return arr;
},[]);
此外,您还可以使用
map
方法

$scope.sports = Object.keys($scope.sports).map((key) => ({id: key, value: $scope.sports[key]}));
现在,您可以按
字段显示您订购的物品

<li ng-repeat="elem in sports | orderBy:'value'">
     <a ng-href='/page/{{elem.id }}'>{{elem.value}}</a> // id: {{id}}
</li>

如前所述,orderBy需要一个
数组作为输入,而不是一个对象

因此,解决方案是将对象转换为数组。您可以使用
reduce
方法通过将回调函数作为
参数传递来实现这一点

$scope.sports = Object.keys($scope.sports).reduce(function(arr,key){
    arr.push({id: key, value: $scope.sports[key]})
    return arr;
},[]);
此外,您还可以使用
map
方法

$scope.sports = Object.keys($scope.sports).map((key) => ({id: key, value: $scope.sports[key]}));
现在,您可以按
字段显示您订购的物品

<li ng-repeat="elem in sports | orderBy:'value'">
     <a ng-href='/page/{{elem.id }}'>{{elem.value}}</a> // id: {{id}}
</li>


如果代码使用
map
而不是
reduce
,那么代码的可读性会更高。感谢您的回答不仅是一个解决方案,而且写得很好:d如果代码使用
map
而不是
reduce
,那么代码的可读性会更高。感谢您的回答不仅仅是一个解决方案,但是写得很明白:D