2012-03-10 5 views
7

У меня есть объект JSON, как например:javascript - как получить имя объекта или имя ассоциативного массива?

var list = {'name1' : {'element1': 'value1'}, 'name2' : {'element1': 'value2'}); 

Как извлечь все строковые значения НТБ?

Например, предположим, что я хочу, чтобы вывести их сцепленных в строке, например, как: «name1 name2»

Использование JQuery в любом решении это хорошо. Пожалуйста посоветуйте ...

ответ

11

Чтобы получить ключи от объекта, есть в ES5, который возвращает массив Object.keys:

Object.keys(list).join(" "); // "name1 name2" 

Если вы хотите, чтобы фильтровать ключи, вы можете использовать .filter:

Object.keys(list).filter(function(key) { 
    return key.indexOf("name") === 0; // filter keys that start with "name" 
}).join(" "); // "name1 name2" 
+1

Одно замечание - метод 'keys' был введен в 1.8.5+. Если вам нужна обратная совместимость, вы можете предпочесть использовать альтернативу, такую ​​как '_.keys' shim from underscore.js (ответ @ mVChr предлагает другой) – rjz

4

Для более старых браузеров, которые не поддерживают keys:

var list_keys = [] 
for (var n in list) { 
    list_keys.push(n) 
} 
var names = list_keys.join(' '); 
+0

Вы должны включить тест hasOwnProperty:' if (list.hasOwnProperty (n)) '. – RobG

2

Поскольку вы сказали JQuery-решение было бы хорошо, вот способ сделать это с JQuery, который не требует ES5 подкладку:

var itemString = $.map(list, function(item, key) { 
    return(key); 
}).join(" "); 

Работа демо здесь: http://jsfiddle.net/jfriend00/a2AMH/

jQuery.map() итерации по свойствам объекта или элементов массива и строит новый массив на основе пользовательской функции, которую мы передаем ему. Затем мы просто присоединяем результаты этого массива к строке. Вы можете прочитать о jQuery.map()here.

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