Javascript 在js中向后迭代散列

Javascript 在js中向后迭代散列,javascript,Javascript,假设我有一个散列 a = { foo : "bar" , zap : "zip" , baz : "taz" } 我可以像这样与它互动 for( var n in a ) { doSomething(a[n]); } 但我想回顾一下…… 关于如何做到这一点的想法?对象属性没有向前或向后,因为规范没有定义顺序。我很确定,甚至不能保证两次遍历都会以相同的顺序给出属性名 (严格来说,您也不知道属性名是散列的,尽管这并不重要。) 如果您需要维护一个顺序(可能是根据添加属性的顺序),那么您必须使用一

假设我有一个散列

a = { foo : "bar" , zap : "zip" , baz : "taz" }
我可以像这样与它互动

for( var n in a ) {
 doSomething(a[n]);
}
但我想回顾一下……


关于如何做到这一点的想法?

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

(严格来说,您也不知道属性名是散列的,尽管这并不重要。)

如果您需要维护一个顺序(可能是根据添加属性的顺序),那么您必须使用一个维护包含键的并行数组的东西来包装属性存储。然后它可以公开迭代器API以允许向前和向后遍历

var a = { foo : "bar" , zap : "zip" , baz : "taz" },
    propertycount = Object.keys(a).length,
    i = propertycount - 1;


for(i; i >= 0; i--){
    console.log(a[Object.keys(a)[i]]);            
}



如果要进行有序遍历,请不要使用哈希

哈希不是按设计排序的

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

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

嗯,这似乎很好:)

的重复?这不是一个
常规for
语句,它类似于
foreach
。而在
foreach
中没有顺序。所以你不能前后颠倒,这和你原来的问题完全不同。另外,您不再像最初询问的那样使用本机散列。您正在创建一个全新的有序数组,您正在遍历该数组