Ссылка на массив литералов объекта javascript - PullRequest
6 голосов
/ 08 октября 2008

Как бы вы охарактеризовали модели (Accord, CRV, Prius и т. Д.) В этой структуре? Это плохая структура, позволяющая извлекать марки ... затем использовать модель для получения моделей ... затем использовать модель для получения параметров?

var cars = [
    {
        "makes"   : "Honda",
        "models"   : [
            {'Accord' : ["2dr","4dr"]} ,
            {'CRV'    : ["2dr","Hatchback"]} ,
            {'Pilot'  : ["base","superDuper"] }
        ]
    }, 
    {
        "makes"   : "Toyota",
        "models"  : [
            {'Prius'   : ["green","reallyGreen"]} ,
            {'Camry'   : ["sporty","square"]} ,
            {'Corolla' : ["cheap","superFly"] }
        ]
    }
];              

Спасибо

Ответы [ 5 ]

7 голосов
/ 08 октября 2008

Состав:

var cars = [
    { name: 'Honda', models: [
                { name: 'Accord', features: ['2dr', '4dr'] },
                { name: 'CRV', features: ['2dr', 'Hatchback'] },
                { name: 'Pilot', features: ['base', 'superDuper'] }
        ]},

    { name: 'Toyota', models: [
                { name: 'Prius', features: ['green', 'superGreen'] },
                { name: 'Camry', features: ['sporty', 'square'] },
                { name: 'Corolla', features: ['cheap', 'superFly'] }
        ]}
];

Я написал про обход и все остальное здесь .

6 голосов
/ 08 октября 2008

авто [0] .моделей.Аккорд автомобили [0] .models.CRV автомобили [0] .модели.Пилот (см. olliej ответ)

Хотя может быть проще использовать следующую концепцию доступа:

cars.Honda.Accord
cars.Toyota.Prius

... используя ...

var cars = {
  Honda : {
    Accord : ["2dr", "4dr"],
    CRV    : ["2dr", "Hatchback"],
    Pilot  : ["base", "superDuper"]
  },
  Toyota : {
    Prius : ["green", "reallyGreen"],
    Camry : ["sporty", "square"],
    Corolla : ["cheap", "superFly"]
  }
};
3 голосов
/ 08 октября 2008

У Джонатана все в порядке, но он пропустил дополнительный уровень Массива на уровне модели, поэтому он должен быть

 cars[0].models[0].Accord
 cars[0].models[1].CRV

и т.д.

Я подозреваю, что вам будет проще использовать структуру в соответствии с:

var cars = [
{makes  : "Honda",
 models  : {
    Accord : ["2dr","4dr"],
    CRV  : ["2dr","Hatchback"],
    Pilot: ["base","superDuper"]  
 }
}, 
{makes   :"Toyota",
 models  : {
    Prius   : ["green","reallyGreen"],
    Camry   : ["sporty","square"],
    Corolla : ["cheap","superFly"]
 }
}];

, в котором массив models заменяется объектом (или ассоциативным массивом, если хотите)

[edit (olliej): приведение кода во второй пример]

2 голосов
/ 08 октября 2008

Вы можете просматривать модели с этим кодом:

for (var i = 0, carslen = cars.length; i < carslen; i++) {
    for (var j = 0, modelslen = cars[i].models.length; j < modelslen; j++) {
        // do something with cars[i].models[j]
    }
}

но я согласен с Оллием в изменении структуры вашего JSON в его формате.

0 голосов
/ 08 октября 2008

На вашем месте я бы не объединил все ваши данные в один большой многомерный массив букв / беспорядков. Я бы инкапсулировал каждый объект и использовал методы для доступа к данным. Это будет намного меньше мешать твоему мозгу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...