显然ng-options正在以词法方式对我的数组进行排序。如何防止此默认行为?
这是months
对象
"months": {
"01": "January",
"02": "February",
"03": "March",
"04": "April",
"05": "May",
"06": "June",
"07": "July",
"08": "August",
"09": "September",
"10": "October",
"11": "November",
"12": "December"
}
这是ng-options生成的html。
<select ng-model="avtripExpMonth" name="avtripExpMonth" ng-options="k as v for (k,v) in months">
<option value="?" selected="selected"></option>
<option value="string:10" label="October">October</option>
<option value="string:11" label="November">November</option>
<option value="string:12" label="December">December</option>
<option value="string:01" label="January">January</option>
<option value="string:02" label="February">February</option>
<option value="string:03" label="March">March</option>
<option value="string:04" label="April">April</option>
<option value="string:05" label="May">May</option>
<option value="string:06" label="June">June</option>
<option value="string:07" label="July">July</option>
<option value="string:08" label="August">August</option>
<option value="string:09" label="September">September</option>
</select>
注意:这不是How to use natural sorting in ng-options的重复,因为这个问题是询问如何防止明显的默认排序行为,而不是如何导致排序。
答案 0 :(得分:1)
正如其中一位评论者指出的那样,javascript对象没有订单,因此语言本身不支持我按特定顺序迭代对象属性的期望。
大多数浏览器会按照定义对象的顺序或按创建新属性的顺序迭代json对象中的属性。但是,并非总是如此。当属性键为非数字整数时,谷歌浏览器显然会保留顺序,但对于转换为整数的键则不然。以下是关于此主题的Google小组讨论:https://code.google.com/p/v8/issues/detail?id=164
另外值得注意的是,ECMAScript 6 specifies a new data structure called Map具有对象的功能,同时保留了顺序。