我怎么能在javascript中向后迭代对象的属性?

时间:2013-07-11 18:05:04

标签: javascript

例如,我已经有一个填充了有序键值的对象,我可以使用 for 语句迭代其键前进

var keyvalues = {"key1":"value1","key2":"value2","key3":"value3"};
for(var key in keyvalues)
{
   var value = keyvalues[key];
   .............
}

现在我想迭代向后键,如'key3','key2','key1',是否有一种神奇的方法可以做到这一点?

2 个答案:

答案 0 :(得分:9)

for... in循环无法保证订单。

等等,什么?

对象键的'顺序'没有逻辑。如果您愿意,可以抓住它们,然后使用.sortlanguage specificationfor...in迭代算法中明确告诉我们:

  

未指定枚举属性的机制和顺序(第一个算法中的步骤6.a,第二个算法中的步骤7.a)。

您有什么选择:

在JavaScript中,大多数时间有序列表由数组表示。如果你喜欢一个有序列表,你可以使用数组:

var values= ["key1","key2","key3"];
for(var i=0;i<values.length;i++){
   values[i];// order is guaranteed here.
}

由于订单有保证,您也可以轻松地reverse

var values= ["key1","key2","key3"].reverse();//reverse is an array method
for(var i=0;i<values.length;i++){
   values[i];// order is guaranteed here.
}

如果您已经拥有 对象,您可以根据某些标准获取其密钥和.sort,例如 - 按字典顺序排列:

var obj = {"key1":"value1","key2":"value2","key3":"value3"};
var keys = Object.keys(obj).sort().reverse(); // see note
for(var i=0;i<keys.length;i++){
    console.log(keys[i]);
}
// will output key3, key2, key1

注意:您可以将比较器传递给.sort并让它为您反转而不是链接 - 这可能是更好的做法。为了教学目的,我一直这样做。

答案 1 :(得分:2)

您可以使用var keys = Objects.keys(keyvalues).sort()来获取对象的所有键,然后在for(int = keys.length;i>0;i--)循环中迭代它,在循环中访问原始对象,如value = object[keys[i]]

编辑:sort函数调用添加到Object.keys返回的键数组中。