如何使用jQuery获取数组键?

时间:2009-08-10 10:49:08

标签: jquery arrays key

下午好。我有一个数组,其中包含一些键和值。然后我需要获取数组键而不是其中的数据。我想用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或任何其他更有效的方式获得此功能?

6 个答案:

答案 0 :(得分:60)

您可以使用each功能:

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

它有几个不错的快捷键/技巧:check the gory details here

答案 1 :(得分:50)

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

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

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

答案 2 :(得分:28)

console.log( Object.keys( {'a':1,'b':2} ) );

答案 3 :(得分:6)

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

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

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

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

修改

在回复您的评论时,我认为本文最好地总结了为什么不应该以这种方式使用JavaScript中的数组的案例 -

答案 4 :(得分:5)

不要重新发明轮子,请使用Underscore

我知道OP专门提到 jQuery 但是我想在这里给出答案,向人们介绍有用的下划线库,如果他们不知道它的话已经。

通过利用Underscore library中的keys方法,您只需执行以下操作:

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

此外,还有许多值得细读的其他有用功能。

答案 5 :(得分: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等的冲突。