JavaScript для в цикле, но наоборот? - PullRequest
3 голосов
/ 19 марта 2012

Получение объекта JavaScript с 4 свойствами:

function Object() {
  this.prop1;
  this.prop2;
  this.prop3;
  this.prop4;
}

var obj = new Object();

Я использую цикл for (in) для проверки каждого свойства, поскольку я не знаю номер или имя свойств:

for(property in obj) {
  var prop = obj[property];
}

Однако я хотел бы обработать свойства, начиная с последнего (prop4 в этом примере). Я полагаю, что я бы хотел обратный цикл.

Как я могу это сделать?

Спасибо, Jack

Добавление: объект, на который я ссылаюсь, это объект, возвращенный из JSON.parse. Свойства, кажется, последовательно упорядочены. Нет метода keys ().

Ответы [ 3 ]

13 голосов
/ 19 марта 2012

A for (x in y) не обрабатывает свойства в каком-либо конкретном порядке, поэтому вы не можете рассчитывать на любой требуемый порядок.

Если вам нужно обработать свойства в определенном порядке, вам нужно будет собрать все свойства в массив, отсортировать массив соответствующим образом и затем использовать эти ключи в нужном порядке.

Используя ES5 (или прокладку ES5), вы можете получить все свойства в массив с помощью:

var keys = Object.keys(obj);

Затем вы можете отсортировать их либо в стандартном лексическом порядке, либо отсортировать с помощью собственной пользовательской функции:

keys.sort(fn);

И тогда вы можете получить к ним доступ в нужном вам порядке:

for (var i = 0; i < keys.length; i++) {
    // process obj[keys[i]]
}
2 голосов
/ 19 марта 2012

Массивы - это упорядоченные объекты. Свойства в объектах изначально неупорядочены. Однако, если у вас есть какая-то конкретная причина, по которой вы хотите работать задом наперед, независимо от того, что создала бы конструкция for..in, вы можете сделать:

var arr = [];
for (prop in obj) {
   arr.push(prop);
}

for (var n=arr.length; n--; ){
   var prop = obj[arr[n]];
}
1 голос
/ 19 марта 2012

Стандарт ECMAScript не определяет порядок итерации для циклов for in. Вы хотите массив, если ваши типы данных должны быть отсортированы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...