2015-04-17 3 views
0

Я пытаюсь извлечь имена всех ключей из массива объектов, сохраняющих временную сложность, как n (только один цикл). Массив, как показано ниже:Получение значений ключа из массива объектов

var addressArray = [{"city":"New York"},{"country":"USA"},{"zip": 45677}]; 

Я хочу, чтобы извлечь ниже:

var addressKeys = ["city", "country", "zip"]. 

Я могу сделать то же самое, первый цикл по массиву, а затем с помощью ключа в цикле OBJ но не нравится. Альтернативы приветствуются.

+0

'addressArray' не является массивом, это объект –

+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; 
     } 
    })(); 
} 
+0

спасибо Иван. :) –

3

Из вашего определения addressArray является объектом не является массивом.

Вы можете использовать Object.keys(), чтобы получить массив ключей объекта.

var addressKeys = Object.keys(addressArray); 

Для поддержки older browsers, который не поддерживает Object.keys вы можете использовать Polyfill

+0

@ArunPJony, я думаю, что этот подход медленнее, потому что он должен создать экземпляр «Object» и сделать некоторые методы ООП. Тест на: http://jsperf.com/object-keys-vs-for-in – tika

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); 
+0

Если бы у меня был один объект, я бы не задал вопрос. –

+0

@JyotirmoyPan У вашего примера есть проблемы. Вам нужно обновить его массивом объектов, которые вы хотите получить. – Piwwoli

2

Использование for-in петля для обратитесь к каждой из key-value и затем нажмите на новый массив: (рекомендуется)

for(var index in addressArray){ 
    addressKeys.push(index) 
} 

Другим решением является:

var addressKeys = Object.keys(addressArray) 

, который идет медленнее, сравнительно.

Смежные вопросы