Как избавиться от этой сортировки(странно), а мне нужны ключи, чтобы быть использованы в коде.. я проверил группы Google, но есть на скрипке, используя два массива, один из которых был хранение значения ключа.
-3">Это ограничение JavaScript не угловая.
От В ECMAScript Третье Издание:
4.3.3 объект является членом объекта типа. Это неупорядоченные коллекции свойств, каждое из которых содержит примитивный значение, объект или функцию. Функция хранится в свойство > у объекта вызывается метод.
Из Спецификации Языка ECMAScript
в [...] порядок перечисления свойств [...] не указан.
Угловые рода объект ключи явно для того, чтобы обеспечить хоть какое-то настойчивое поведение.
Решение чтобы перебирать извлеченные ключи:
<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
};
Редактировать: я'вэ подал ошибка, не стесняйтесь +1
ECMAScript не указать порядок, в котором ключи должны быть повторяемыми, однако все основные браузеры реализуют объекты, как связанные хэш-карты (сохраняет порядок) и множество JS библиотек от этого зависит поведение и так мы'вэ привык к ней и она'ы вряд ли изменится.
Угловой с другой стороны (что является совершенно неожиданный) сортирует его по алфавиту. Я'вэ осмотрел исходный код сам, это жестко там и было бы хорошо, если бы проблема разрешилась за один день. В противном случае (к, в) в obj
функция полностью бесполезный.
Вы действительно ничего не может сделать с этим, обманывая угловой думать, что ваш результат-это массив это не полезно на все, потому что вам нужно цифровых клавиш, затем...
Если это так, вы можете определить геттер для длины:
Object.defineProperty(yourResultObjectOrPrototype, 'length', {
get: function(){
return Object.keys(this).length;
}
})
В противном случае вы'МР нужен какой-то фильтр, который будет итерировать объект, используя для(ВАР к в OBJ) и результат хранить в массиве.
Там есть ответ: это's посетило orderby и не нам
https://docs.angularjs.org/api/ng/filter/orderBy
{{ orderBy_expression | заказатьпо : выражение : реверс}}
<tr ng-repeat="friend in friends | orderBy:'-age'">
<td>{{friend.name}}</td>
<td>{{friend.phone}}</td>
<td>{{friend.age}}</td>
</tr>
Ваш список просто должен быть список, и вы, возможно, нужен индекс, чтобы знать установленном порядке
$scope.Dates = [{index:1, "Today":"30"},
{index:2,"This Week":"42"},
{index:3,"This Month": "Oct"},
{index:4,"This Quarter" : "Bad"},
{index:5,"This Year" : 2013}]
а потом
<tr ng-repeat="(key, value) in Dates | orderBy:'index'">
<td>{{key}}</td>
<td>{{value}}</td>
</tr>
Это фиксированная угловых 1.4.
Подробности здесь:
ранее порядок пользования, когда с помощью ngRepeat для перебора свойств объекта гарантируют, будет непротиворечивым путем сортировки в алфавитном порядке.
теперь, порядок элементов зависит от браузера, на основании того, что вернулся из прохода на объект, используя для ключей в синтаксис obj-файлы`.
Это кажется, что браузеры, как правило, следовать стратегии предоставления ключей в том порядке, в котором они были определены...
Мне удалось отсортировать объект строки по ключу в алфавитном порядке, как это с НГ-повторите!
В мой контроллер:
$scope.build_config = {
build_path : "/x/eng/build",
arch : "x86",
variant : "debug",
run_method : "boot",
};
$scope.get_keys = function (obj) {
if (obj)
return Object.keys(obj);
};
В моем HTML-код:
<tr ng-repeat="key in get_keys(build_config) | orderBy:'toString()'">
<td> {{key}} </td>
<td> {{selected.build_config[key]}} </td>
</tr>
Объект.ключи не'т оставляем заказ - к вашему сведению https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/keys
// массив как объект, с помощью случайного ключа заказ
var an_obj = { 100: 'a', 2: 'b', 7: 'c' };
console.log(Object.keys(an_obj)); // console: ['2', '7', '100']
Я преобразовать его в массив объектов
$scope.Dates = [
{ id: "Today", value:"30" },
{ id: "This Week", value:"42" },
{ id: "This Month", value: "Oct" },
{ id: "This Quarter", value : "Bad" },
{ id: "This Year", value : 2013 }
];
<li ng-repeat="date in Dates">{{date.id}} -> {{date.value}}</li>
Ну, как описано в угловой's документация для ngRepeat
https://docs.angularjs.org/api/ng/directive/ngRepeat#iterating-over-object-properties
при использовании его для перебора свойств объекта, он не будет работать
встроенный фильтр orderby и фильтр не работают с объектами, а выдаст ошибку, если используется с одним.
Лучшее решение в данном случае, я думаю, что использование массивов вместо объектов и их свойств. Поэтому просто преобразовать его в массив, перебирает свойства объекта и толкает в новый массив например. В конце концов, я думаю, что будет естественным выбором для коллекции, а не один объект с несколькими свойствами.