Подтвердить что ты не робот

Цикл через ассоциативный массив в обратном порядке

Я использую ассоциативный массив javascript (arr), и я использую этот метод для его прокрутки.

for(var i in arr) {
    var value = arr[i];
    alert(i =") "+ value);
}

Проблема в том, что порядок элементов важен для меня, и ему нужно переходить от последнего к первому, а не сначала продолжать, как это происходит в настоящее время.

Есть ли способ сделать это?

4b9b3361

Ответ 1

Использование временного массива, удерживающего клавиши в обратном порядке:

var keys = new Array();

for (var k in arr) {
    keys.unshift(k);
}

for (var c = keys.length, n = 0; n < c; n++) {
   alert(arr[keys[n]]);
}

Ответ 2

Четыре вещи:

  • JavaScript имеет массивы (integer-indexed [см. комментарии ниже]) и объекты (с индексом строки). То, что вы бы назвали ассоциативным массивом на другом языке, называется объектом в JS.

  • Вы не должны использовать for in для цикла через массив JS.

  • Если вы перебираете объект, используйте: hasOwnProperty.

  • JavaScript не гарантирует порядок ключей в объекте. Если вы заботитесь о порядке, используйте массив.

Если вы используете обычный массив, сделайте следующее:

for (var i = arr.length - 1; i >= 0; i--) {
    //do something with arr[i]
}

Ответ 3

Для нормального массива я бы сделал следующее:

var i = arr.length;
while (i--) {
    var value = arr[i];
    alert(i =") "+ value);
}

Это быстрее, чем цикл "для".

http://blogs.oracle.com/greimer/entry/best_way_to_code_a

Ответ 4

В современных браузерах теперь вы можете использовать Object.keys, чтобы получить свой массив свойств и выполнить его в обратном порядке, позволяя пропустить предварительный цикл сбора ключей.

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/keys

var keys = Object.keys(subject);
for (var i = keys.length-1; i >= 0; i--) {
    var k = keys[i],
        v = subject[k];
    console.log(k+":",v);
}