我想知道是否有一种快速的方法可以将关联数组的键提取到数组或使用 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);
一种 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 示例中的片段大致相同,但有 2 个例外:
hasOwnProperty
方法。但是,这(以及此处的其他答案)无法解决 IE 枚举错误。您可以在此处找到有关此答案的更多信息和部分解决方法。
您可以$.each()
在 jQuery 中使用:
function keyArray(obj) {
var rv = [];
$.each(options, function(key) { rv.push(key); });
return rv;
}
然后
var keys = keyArray(options);
给你["key1", "key2"]
一个数组,你可以join
得到一个字符串。