获取 JavaScript 对象的所有键
-
25-09-2019 - |
题
我想知道是否有一种快速方法可以使用 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 枚举错误。您可以在以下位置找到更多信息和部分解决方法: 这个答案在这里.
可以jQuery中使用$.each()
:
function keyArray(obj) {
var rv = [];
$.each(options, function(key) { rv.push(key); });
return rv;
}
然后
var keys = keyArray(options);
给你["key1", "key2"]
作为数组,这你可以join
得到一个字符串。
不隶属于 StackOverflow