获取JavaScript对象的所有键

时间:2010-12-09 15:40:42

标签: javascript jquery arrays javascript-objects

我想知道是否有一种快速方法可以将关联数组的键提取到数组中,或者使用JavaScript(jQuery就可以)将逗号分隔的列表提取出来。

options = {key1: "value1", key2: "value2"};

结果应该是数组:

["key1", "key2"]

或只是一个字符串:

"key1, key2"

6 个答案:

答案 0 :(得分:26)

您可以通过for循环轻松获取它们的数组,例如:

var keys = [];
for(var key in options) {
  if(options.hasOwnProperty(key)) { //to be safe
    keys.push(key);
  }
}

然后使用keys您想要的方式,例如:

var keyString = keys.join(", ");

You can test it out here.hasOwnProperty()检查是安全的,以防有人弄乱对象原型等。

答案 1 :(得分:24)

options = {key1: "value1", key2: "value2"};
keys = Object.keys(options);

答案 2 :(得分:5)

jQuery方法:

var keys = [];
options = {key1: "value1", key2: "value2"};
$.each(options, function(key, value) { keys.push(key) })
console.log(keys)

答案 3 :(得分:2)

现在大多数主流浏览器都内置了此功能,方法为Object.keys()

var keys = Object.keys(options);
//-> ["key1", "key2"]

您还可以使用一小段代码在不支持它的浏览器中实现:

Object.keys = Object.keys || (function () {
    var hasOwnProperty = Object.prototype.hasOwnProperty;

    return function (o) {
        if (typeof o != "object" && typeof o != "function" || o === null)
            throw new TypeError("Object.keys called on a non-object");

        var result = [];
        for (var name in o) {
            if (hasOwnProperty.call(o, name))
                result.push(name);
        }

        return result;
    };
})();

该片段与Nick Craver的例子中的片段大致相同,但有两个例外:

  • 如果您传递除Object之外的任何内容(或“关联数组”,如果您愿意),它将抛出一个有意义的TypeError。
  • 它将解决Internet Explorer中一个恼人的与DOM相关的问题,其中集合没有hasOwnProperty方法。

然而,这(以及此处的其他答案)不适用于IE枚举错误。您可以在this answer here上找到更多信息并进行部分解决。

答案 4 :(得分:2)

您现在可以使用

Object.keys(obj)

获取由对象中的可用键组成的数组。 Mozilla has usage and availability information

答案 5 :(得分:0)

您可以在jQuery中使用$.each()

function keyArray(obj) {
  var rv = [];
  $.each(options, function(key) { rv.push(key); });
  return rv;
}

然后

var keys = keyArray(options);

为您提供["key1", "key2"]数组,您可以join获取字符串。