一尘不染

ng-repeat指令在使用(key,value)时对数据进行排序

angularjs

我有一个类似ng-repeat =“(数据中的(键,值))的代码。在控制器中:

  $scope.Dates = {"Today":"30",
                  "This Week":"42",
                  "This Month": "Oct",
                  "This Quarter" : "Bad",
                  "This Year" : 2013
                                }

和ng-repeat指令为

<div ng-repeat="(key,value) in Dates">
{{key}} ==> {{value}}
</div>

输出按以下顺序排序

This Month ==> Oct
This Quarter ==> Bad
This Week ==> 42 
This Year ==> 2013
Today ==> 30

如何摆脱这种排序(奇怪),因为我想在代码中使用键。。我检查了google
group,但使用两个存储键值的数组有一个小提琴。http://jsfiddle.net/Saulzar/puhML/3/b。不想采用这种方法。


阅读 333

收藏
2020-07-04

共1个答案

一尘不染

这是JavaScript而不是Angular的限制。

ECMAScript第三版

4.3.3对象是对象类型的成员。 它是 属性 的无序集合 ,每个属性都包含原始值,对象或函数。存储在对象属性中的函数称为方法。

来自ECMAScript语言规范

枚举属性[…]的顺序 未指定

Angular
明确地对象键进行排序,以提供至少某种持久性行为。

解决方法 是遍历提取的密钥:

<div ng-repeat="key in keys(Dates)">
  {{key}} ==> {{Dates[key]}}
</div>



$scope.keys = function(obj){
  return obj? Object.keys(obj) : [];
}

$scope.Dates = {
  "Today":"30",
  "This Week":"42",
  "This Month": "Oct",
  "This Quarter" : "Bad",
  "This Year" : 2013
};
2020-07-04