40

下午好。我有一个包含一些键和值的数组。然后我需要获取数组键而不是其中的数据。我想用 jQuery 做到这一点。例如,我知道 PHP 有一个名为 array_keys(); 的函数。它将数组作为参数,并为您返回一个数组,其中包含每个索引中的每个键。

这就是我想出的,并且有效……唯一的问题是它似乎效率低下;

var foo = [];
foo['alfa'] = "first item";
foo['beta'] = "second item";

for (var key in foo) {
    console.log(key);
}

这将输出;

alfa
beta

但是是否有任何预定义的函数,如 PHP 或任何其他更有效的方法?

4

6 回答 6

67

您可以使用以下each功能:

var a = {};
a['alfa'] = 0;
a['beta'] = 1;
$.each(a, function(key, value) {
      alert(key)
});

它有几个不错的快捷方式/技巧:在此处查看血腥细节

于 2009-08-10T11:04:44.023 回答
51

使用 jQuery,从对象获取键数组的最简单方法如下:

$.map(obj, function(element,index) {return index})

在您的情况下,它将返回此数组:["alfa", "beta"]

于 2013-03-20T12:15:23.130 回答
33
console.log( Object.keys( {'a':1,'b':2} ) );
于 2012-03-28T17:58:13.620 回答
6

不要重新发明轮子,使用下划线

我知道 OP 专门提到了jQuery,但我想在这里给出一个答案,以便向人们介绍有用的Underscore库,如果他们还不知道的话。

通过利用Underscore 库keys中的方法,您可以简单地执行以下操作:

_.keys(foo)  #=> ["alfa", "beta"]

Plus, there's a plethora of other useful functions that are worth perusing.

于 2014-09-25T18:34:33.517 回答
5

为此使用对象(键/值对,最近的 JavaScript 必须是关联数组),而不是数组对象。除此之外,我相信这是最优雅的方式

var foo = {};
foo['alfa'] = "first item";
foo['beta'] = "second item";

for (var key in foo) {
        console.log(key);
}

注意:JavaScript 不保证属性的任何特定顺序。所以你不能指望最先定义的属性首先出现,它可能最后出现。

编辑:

针对您的评论,我相信这篇文章最好地总结了为什么 JavaScript 中的数组不应该以这种方式使用的案例 -

于 2009-08-10T10:53:32.813 回答
0

我使用类似我创建的这个函数的东西......

Object.getKeys = function(obj, add) {
    if(obj === undefined || obj === null) {
        return undefined;
    }
    var keys = [];
    if(add !== undefined) {
        keys = jQuery.merge(keys, add);
    }
    for(key in obj) {
        if(obj.hasOwnProperty(key)) {
                keys.push(key);
        }
    }
    return keys;
};

我认为您可以在第一次测试中将 obj 设置为 self 或更好的值。有时我似乎也在检查它是否也是空的,所以我就这样做了。另外我不认为 {} 是 Object.* 或者至少以这种方式在 Object 上找到函数 getKeys 存在问题。也许你应该把原型放在第一位,但这似乎会导致与 GreenSock 等的冲突。

于 2014-05-01T20:31:19.637 回答