2012-03-29 6 views
3

Так позволяет сказать, что у меня есть хэшитерация хэша назад в JS

a = { foo : "bar" , zap : "zip" , baz : "taz" } 

Я interate над ним, как этот

for(var n in a) { 
doSomething(a[n]); 
} 

, но я хочу, чтобы идти в обратном направлении через него ...

мысли о том, как это сделать?

+1

дубликата http://stackoverflow.com/questions/4956256/loop-through-associative-array -в обратном порядке? –

+0

Это не утверждение 'regular for', оно похоже на' foreach'. И в 'foreach' нет порядка. Таким образом, вы не можете вернуться и переслать – MatuDuke

ответ

7

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

(Строго говоря, вы не знаете, что имена свойств хэшируются, хотя это не имеет большого значения.)

Если вам необходимо поддерживать порядок (возможно, в соответствии с порядком, в котором свойства были добавлены), вы должны были бы обернуть хранилище свойств чем-то, что поддерживало параллельный массив, содержащий ключи. Затем он может выставлять API-интерфейсы итератора, чтобы позволить обход вперед и назад.

1

не используют хэши, если вы хотите сделать заказанную обход.

хэш Арента заказали дизайн

0
a = { foo : "bar" , zap : "zip" , baz : "taz" } 

for(var i=Object.keys(a).length-1; i>=0; --i){ 
    doSomething(a[Object.keys(a)[i]]); 
} 

Хм это, кажется, работает нормально :)

+0

, это совсем не так, как ваш оригинальный вопрос. плюс вы arent, используя собственный хэш больше, как вы оригинал спросил. вы создаете целый новый упорядоченный массив, по которому вы проходите – cpjolicoeur

Смежные вопросы