8

この構造でモデル (アコード、CRV、プリウスなど) をどのように参照しますか? make を抽出して make を使用してモデルを取得し、モデルを使用してオプションを取得するには、これは悪い構造ですか?

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"] }
        ]
    }
];              

ありがとう

4

5 に答える 5

8

構造:

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'] }
        ]}
];

トラバーサルとその他すべてについてここに書きました。

于 2008-10-08T00:39:33.363 に答える
6

cars[0].models.Accord cars[0].models.CRV cars[0].models.Pilot ( 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"]
  }
};
于 2008-10-07T23:39:51.050 に答える
3

Jonathan の説明は正しいですが、モデル レベルでの Array の追加レベルを見逃しているため、次のようにする必要があります。

 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オブジェクト(または必要に応じて連想配列)に置き換えられます

[編集 (olliej): 2 番目の例のコードの整理]

于 2008-10-07T23:44:11.960 に答える
2

次のコードでモデルをトラバースできます。

for (var i = 0, carlen = cars.length; i < carlen; i++) {
    for (var j = 0, modelslen = car[i].models.length; j < modelslen; j++) {
        // cars[i].models[j] で何かをする
    }
}

しかし、JSON の構造を彼の形式に変更することについては、Olliej に同意します。

于 2008-10-08T00:30:00.200 に答える
0

もし私があなたなら、あなたのすべてのデータを 1 つの大きな多次元配列/オブジェクト リテラルの混乱にまとめることはしません。各オブジェクトをカプセル化し、メソッドを使用してデータにアクセスします。それはあなたの脳を混乱させることはほとんどありません。

于 2008-10-07T23:44:52.117 に答える