20

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

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

结果应该是数组:

["key1", "key2"]

或者只是一个字符串:

"key1, key2"
4

6 回答 6

29

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

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

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

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

你可以在这里测试一下。检查是安全的.hasOwnProperty(),以防有人弄乱了对象原型等。

于 2010-12-09T15:42:46.370 回答
26
options = {key1: "value1", key2: "value2"};
keys = Object.keys(options);
于 2012-03-08T10:52:07.947 回答
5

一种 jQuery 方法:

var keys = [];
options = {key1: "value1", key2: "value2"};
$.each(options, function(key, value) { keys.push(key) })
console.log(keys)
于 2010-12-09T15:45:32.197 回答
3

现在大部分主流浏览器都内置了这个功能,方法是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 示例中的片段大致相同,但有 2 个例外:

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

但是,这(以及此处的其他答案)无法解决 IE 枚举错误。您可以在此处找到有关此答案的更多信息和部分解决方法。

于 2010-12-09T16:09:59.203 回答
2

您现在可以使用

Object.keys(obj)

获取由对象中的可用键组成的数组。Mozilla 有使用和可用性信息

于 2014-10-15T10:01:29.827 回答
0

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

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

然后

var keys = keyArray(options);

给你["key1", "key2"]一个数组,你可以join得到一个字符串。

于 2010-12-09T15:45:48.020 回答