【问题标题】:Referencing a javascript object literal array引用 javascript 对象字面量数组
【发布时间】:2008-10-07 23:36:35
【问题描述】:

您将如何引用此结构中的模型(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"] }
        ]
    }
];              

谢谢

【问题讨论】:

    标签: javascript data-structures


    【解决方案1】:

    结构:

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

    我写了关于遍历和其他一切here

    【讨论】:

    • 我选择了这个答案,因为它回答了“这个结构不好......?”这个问题。是的...通过添加固定的“名称”(即名称、模型等),它允许我使用循环(以及 Marko Dumic 在其他答案中提出的其他方式)迭代数据,谢谢
    【解决方案2】:

    汽车[0].models.Accord 汽车[0].models.CRV 汽车[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"]
      }
    };
    

    【讨论】:

      【解决方案3】:

      乔纳森是对的,但是他错过了模型级别的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 数组被一个对象(或关联数组,如果你喜欢)替换

      [edit (olliej): 在第二个例子中整理代码]

      【讨论】:

        【解决方案4】:

        您可以使用此代码遍历模型:

        for (var i = 0, carslen = cars.length; i

        但我同意 Olliej 关于将 JSON 的结构更改为他的格式的观点。

        【讨论】:

          【解决方案5】:

          如果我是你,我不会将你所有的数据都集中到一个大的多维数组/对象字面量中。我会封装每个对象并使用方法来访问数据。它对你的大脑的干扰会少很多。

          【讨论】:

          • 这看起来像一个 JSON 响应,所以没有适合你的方法。
          • 使用 JSON 的正确方法是在原始 eval() 函数上添加一层代码包装器(主要是出于安全原因)。在该层,您可以通过一些工作正确地封装您的数据。至少这是个好主意。
          猜你喜欢
          • 2010-11-09
          • 1970-01-01
          • 1970-01-01
          • 2013-04-22
          • 2014-02-26
          • 2020-11-17
          • 2013-04-26
          • 1970-01-01
          • 2016-05-15
          相关资源
          最近更新 更多