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
中没有顺序。所以你不能前后颠倒,这和你原来的问题完全不同。另外,您不再像最初询问的那样使用本机散列。您正在创建一个全新的有序数组,您正在遍历该数组