我想從時間複雜度爲n的對象數組中提取所有鍵的名稱(僅限一個循環)。該陣列是如下:從對象數組中獲取鍵值
var addressArray = [{"city":"New York"},{"country":"USA"},{"zip": 45677}];
我想提取以下:
var addressKeys = ["city", "country", "zip"].
我能夠通過數組第一循環再利用的obj循環鍵來執行相同的,但該不太好。替代品是最受歡迎的。
我想從時間複雜度爲n的對象數組中提取所有鍵的名稱(僅限一個循環)。該陣列是如下:從對象數組中獲取鍵值
var addressArray = [{"city":"New York"},{"country":"USA"},{"zip": 45677}];
我想提取以下:
var addressKeys = ["city", "country", "zip"].
我能夠通過數組第一循環再利用的obj循環鍵來執行相同的,但該不太好。替代品是最受歡迎的。
使用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;
}
})();
}
謝謝伊萬。 :) –
根據你的定義addressArray
是一個對象而不是數組。您可以使用Object.keys()來獲取對象的鍵數組。
var addressKeys = Object.keys(addressArray);
爲了支持older browsers,不支持,你可以使用Object.keys
一個Polyfill
@ArunPJony,我認爲這種方法比較慢,因爲它必須創建Object的實例並執行一些OOP方法。測試:http://jsperf.com/object-keys-vs-for-in – tika
注意,我切換到[]的用{}的:
var addressObject = {"city":"New York", "country":"USA", "zip": 45677};
var keys = [];
for(var address in addressObject)
{
keys.push(address);
}
console.log(keys);
如果我有一個單一的對象,我不會問這個問題。 –
@JyotirmoyPan你的例子有問題。您需要使用您想獲取密鑰的對象數組來更新它。 – Piwwoli
使用for-in
環路訪問每個key-value
對,然後推送到新陣列:(推薦)
for(var index in addressArray){
addressKeys.push(index)
}
另一種解決方案是:
var addressKeys = Object.keys(addressArray)
這是相對較慢。
'addressArray'不是一個數組,它是一個對象 –
編輯數組。它是一組對象。 –