我想知道在JavaScript中(jQuery也可以),是否有一种快速提取关联数组的键并将其存储到数组或逗号分隔列表中的方法。
options = {key1: "value1", key2: "value2"};
结果应该是数组:
["key1", "key2"]
或者只是一个字符串:
"key1, key2"
我想知道在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);
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示例中的代码片段非常相似,但有两个例外:
hasOwnProperty
方法。然而,这个答案(以及其他答案)并不能解决IE枚举错误。您可以在此答案中找到更多信息和部分解决方法。
$.each()
:function keyArray(obj) {
var rv = [];
$.each(options, function(key) { rv.push(key); });
return rv;
}
那么
var keys = keyArray(options);
给你一个数组 ["key1", "key2"]
,你可以使用 join
方法将其连接成字符串。
hasOwnProperty()
检查,请参见此处:http://www.jsfiddle.net/nick_craver/TJDCV/ - Nick Craver.zip()
函数,你就可以走得更远... - Pointy
["key1","key2"]
而不是{"key1","key2"}
。 - epascarelloObject
对象上 - *Object.keys()*。 - Andy E