【问题标题】:How could I iterate on object's attributes backwards in javascript?如何在javascript中向后迭代对象的属性?
【发布时间】:2013-07-10 03:18:05
【问题描述】:

例如我已经有一个用有序键值填充的对象,我可以用 for in 语句迭代它的键forwards

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

现在我想像'key3'、'key2'、'key1'这样向后迭代键,有没有什么神奇的方法可以做到这一点?

【问题讨论】:

标签: javascript


【解决方案1】:

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 并让它为您反转它而不是链接 - 这可能是更好的做法。出于教学目的,我保持这种方式。

【讨论】:

    【解决方案2】:

    您可以使用var keys = Objects.keys(keyvalues).sort() 来获取对象的所有键,然后在for(int = keys.length;i&gt;0;i--) 循环中遍历它的反词,访问原始对象,就像循环中的value = object[keys[i]] 一样

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

    【讨论】:

    • Object.keys返回的订单不保证。
    • 你将如何通过具有动态变化键的 对象 向后迭代?
    • @Legion 您可以对它们进行排序-请参阅我的答案。键以 key1,key2,key3 的顺序迭代的事实完全是巧合 - 它是实现细节,可能会在任何一天发生变化。
    猜你喜欢
    • 1970-01-01
    • 2016-02-26
    • 2011-06-18
    • 1970-01-01
    • 2020-05-18
    • 1970-01-01
    • 1970-01-01
    • 2022-07-14
    • 2011-07-22
    相关资源
    最近更新 更多