我正在尝试从对象数组中提取所有键的名称,将时间复杂度保持为n(仅限一个循环)。数组如下:
var addressArray = [{"city":"New York"},{"country":"USA"},{"zip": 45677}];
我想提取以下内容:
var addressKeys = ["city", "country", "zip"].
我能够做到这一点,首先循环遍历数组,然后在obj循环中使用一个键,但这并不好。备选方案是最受欢迎的。
答案 0 :(得分:3)
使用Object.keys获取密钥。
if (typeof Object.keys !== "function") {
(function() {
Object.keys = Object_keys;
function Object_keys(objectToGet) {
var keys = [], name;
for (name in objectToGet) {
if (objectToGet.hasOwnProperty(name)) {
keys.push(name);
}
}
return keys;
}
})();
}
答案 1 :(得分:3)
根据您的定义addressArray
是一个对象而不是一个数组。
您可以使用Object.keys()获取对象的键数组。
var addressKeys = Object.keys(addressArray);
要支持不支持Object.keys
的{{3}},您可以使用older browsers
答案 2 :(得分:2)
使用for-in
循环访问每个key-value
对,然后推送到新阵列:(推荐)
for(var index in addressArray){
addressKeys.push(index)
}
另一种解决方案是:
var addressKeys = Object.keys(addressArray)
比较慢。
答案 3 :(得分:1)
请注意,我用[}' s切换了[]' s。
var addressObject = {"city":"New York", "country":"USA", "zip": 45677};
var keys = [];
for(var address in addressObject)
{
keys.push(address);
}
console.log(keys);