2012-03-29 58 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的重复-相反? – 2012-03-29 17:20:32

+0

这不是'regular for'语句,它与'foreach'类似。而在“foreach”中没有订单。所以你不能回头 – MatuDuke 2012-03-29 17:20:40

回答

7

没有向前或向后的对象属性,因为没有规范定义的顺序。我很确定,甚至没有保证两次遍历都必然会以相同的顺序给你属性名称。

(严格地说,你也不知道属性名称被散列,尽管这没有多大意义的。)

如果你需要维持一个排序(也许是根据顺序的属性已经被添加),你必须用维护包含密钥的并行数组的东西来包装属性存储。然后它可以公开迭代器API来允许遍历向前和向后。

1

不使用哈希值,如果你想要做的有序遍历。

哈希的arent设计下令

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

这是完全不同于你原来的问题。再加上你不再使用本地散列,就像你原来问的那样。你正在创建一个你正在遍历的全新有序数组 – cpjolicoeur 2012-03-29 17:29:39