У меня есть массив объектов, которые содержат другие объекты. На данный момент способ, которым я их объявляю, довольно длинный. Есть ли более сжатый способ сделать следующее:
function city(name,population)
{
this.name = name;
this.population = population;
}
function state(name)
{
this.name= name;
this.cities = new Array();
}
function country(name)
{
this.name= name;
this.states = new Array();
}
Countries = new Array();
Countries[0] = new Country("USA");
Countries[0].states[0] = new State("NH");
Countries[0].states[0].cities[0] = new city("Concord",12345);
Countries[0].states[0].cities[1] = new city("Foo", 456);
...
Countries[3].states[6].cities[35] = new city("blah", 345);
Есть ли способ объявить эту настройку не такой многословной, что-то похожее на то, как будет выглядеть XML, что-то вроде:
data =
usa
NH
concord: 34253
foo: 3423
blah: 99523
NC
place: 23522
Uk
foo
bar: 35929
yah: 3452
Я не могу выяснить, как вложить объявления массива без необходимости постоянно повторять имена переменных.
Используйте литералы объектов и массивов:
var data = {
usa : {
NH : {
concord: 34253,
foo: 3423,
blah: 99523
},
NC : {
place: 23522
}
},
uk : {
foo : {
bar: 35929,
yah: 3452
}
}
}
Или что-то, что более точно отражает исходный код:
var Countries = [
{
name : 'USA',
states : [
{
name : 'NH',
cities : [
{
name : 'Concord',
population : 12345
},
{
name : "Foo",
population : 456
}
/* etc .. */
]
}
]
},
{
name : 'UK',
states : [ /* etc... */ ]
}
]
Примечание. В javascript var foo = []
точно эквивалентно (и предпочтительный способ для записи) var foo = new Array()
. Кроме того, var foo = {}
совпадает с var foo = new Object()
.
Примечание. Не забудьте добавить запятые между отдельными подобъектами.
Этого вам будет достаточно?
var data = [
{ name: "USA",
states: [
{ name: "NH",
cities: [
{ name: "concord", population: 34253 },
{ name: "foo", population: 3423 },
{ name: "blah", population: 99523 }
]
},
{ name: "NC",
cities: [
{ name: "place", population: 23522 }
]
}
]
},
{
name: "UK",
states: [
{ name: "foo",
cities: [
{ name: "bar", population: 35929 },
{ name: "yah", population: 3452 }
]
}
]
}
]
data = {
usa: {
NH: {
concord: 34253,
foo: 3423,
blah: 99845
}
uk: {
foo: {
bar: 3454,
yah: 33457
}
}
}
}