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

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

结果应该是数组:

["key1", "key2"]

或者只是一个字符串:

"key1, key2"
有帮助吗?

解决方案

可以很容易地通过一个for循环得到它们的阵列,例如:

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

然后使用keys你怎么想,例如:

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

你可以在这里测试它。该 .hasOwnProperty() 检查是安全的,在混乱的情况下任何人对象原型和这样。

其他提示

options = {key1: "value1", key2: "value2"};
keys = Object.keys(options);
做这件事的

一个jQuery的方式:

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

现在大部分主流浏览器都内置了这个功能,方法是 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 示例中的代码非常相似,但有两个例外:

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

然而,这个(以及这里的其他答案)并不能解决 IE 枚举错误。您可以在以下位置找到更多信息和部分解决方法: 这个答案在这里.

现在可以使用

Object.keys(obj)

以获得由在对象可用密钥的阵列。 Mozilla将使用情况和可用性的信息

可以jQuery中使用$.each()

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

然后

var keys = keyArray(options);

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top