Комплекс JS Объект
Я имею дело с довольно сложным массивом JSON, включенным ниже. Я пытаюсь создать массив объектов Country с их посещениями. Вот образец массива:
{
"data":[
{
"period":"Month",
"start_date":"2012-06",
"end_date":"2012-07",
"attributes":{
},
"measures":{
"Visits":1000000
},
"SubRows":[
{
"Unknown":{
"measures":{
"Visits":1000
},
"SubRows":null
},
"**":{
"measures":{
"Visits":1000
},
"SubRows":null
},
"Afghanistan":{
"measures":{
"Visits":1000
},
"SubRows":null
},
"Aland Islands":{
"measures":{
"Visits":1000
},
"SubRows":null
},
"Albania":{
"measures":{
"Visits":100
},
"SubRows":null
},
}
]
}
]
}
я использую data[0].SubRows[0]
перейти к массиву объектов страны, но теперь я озадачен, как перейти один ниже, так как каждый подобъект назван по-своему? Мой предполагаемый вывод для API визуализации Google, как показано ниже:
var data = google.visualization.arrayToDataTable([
['Country', '% Visits'],
['United Kingdom', 1000],
['United States', 1000],
['France', 1000],
['Australia', 1000],
]);
2 ответа
Глибнес добирается туда с for in
предложение, придерживающееся ваших имен переменных (кстати: в JS это объекты, а не массивы... ну, массивы - это объекты, но я не собираюсь быть таким педантичным).
var measures = {};
for (var cName in data[0].SubRows[0])//your country objects
{//it's always a good idea to check if a property is set directly to the object
//if not, inheritance chain properties will show up here, too
if (data[0].SubRows[0].hasOwnProperty(cName))
{
//assuming this object will Always be set, if not: check first
measures[cName] = data[0].SubRows[0][cName].measures.Visits;
}
}
measures
теперь будет одноуровневым объектом, где страны являются ключами, а значения - визитами. Не стесняйтесь добавлять дополнительные проверки, или использовать значения непосредственно для создания контента или... что угодно
Что вам действительно нужно, если я правильно понимаю, так это массив массивов:
var result = [['Country', '% Visits']];
for (var cName in data[0].SubRows[0])//your country objects
{
if (data[0].SubRows[0].hasOwnProperty(cName))
{
result.push([cName,data[0].SubRows[0][cName].measures.Visits]);
}
}
result
теперь будет массивом, состоящим из массивов, каждый из которых имеет 2 значения. result[x][0]
-> страна и result[x][1]
-> значение мер. Посещение:
result[1][0] === 'United Kingdom' && result[1][1] == 1000
Использовать для... в заявлении:
var Country = JSONObject['data']['SubRows'];
var Data = {};
for(name in Country)
{
Data[name] = Country[name]['measures']['Visits'];
}
Это должно быть легко соответствовать вашим потребностям.