首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >按排序顺序遍历Javascript关联数组

按排序顺序遍历Javascript关联数组
EN

Stack Overflow用户
提问于 2009-05-20 23:54:07
回答 10查看 151.7K关注 0票数 112

假设我有一个Javascript关联数组(也称为。哈希,也就是。字典):

var a = new Array();
a['b'] = 1;
a['z'] = 1;
a['a'] = 1;

如何按排序顺序遍历键?如果它有助于简化事情,我甚至不需要这些值(它们都只是数字1)。

EN

回答 10

Stack Overflow用户

回答已采纳

发布于 2009-05-21 00:01:20

您不能直接迭代它们,但您可以找到所有键,然后对它们进行排序。

var a = new Array();
a['b'] = 1;
a['z'] = 1;
a['a'] = 1;    

function keys(obj)
{
    var keys = [];

    for(var key in obj)
    {
        if(obj.hasOwnProperty(key))
        {
            keys.push(key);
        }
    }

    return keys;
}

keys(a).sort(); // ["a", "b", "z"]

然而,没有必要使变量'a‘成为数组。您实际上只是将其用作对象,并且应该像这样创建它:

var a = {};
a["key"] = "value";
票数 123
EN

Stack Overflow用户

发布于 2012-06-30 19:40:30

您可以使用Object.keys内置方法:

var sorted_keys = Object.keys(a).sort()

(注意:这不适用于不支持EcmaScript5的非常旧的浏览器,特别是IE6、7和8。有关详细的最新统计信息,请参阅this table)

票数 137
EN

Stack Overflow用户

发布于 2009-05-21 00:21:08

您甚至可以将其原型化为object:

Object.prototype.iterateSorted = function(worker)
{
    var keys = [];
    for (var key in this)
    {
        if (this.hasOwnProperty(key))
            keys.push(key);
    }
    keys.sort();

    for (var i = 0; i < keys.length; i++)
    {
        worker(this[ keys[i] ]);
    }
}

和用法:

var myObj = { a:1, b:2 };
myObj.iterateSorted(function(value)
{
    alert(value);
} 
票数 14
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/890807

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档