代码之家  ›  专栏  ›  技术社区  ›  Jay Corbett

javascript数组引用

  •  0
  • Jay Corbett  · 技术社区  · 17 年前

    如果我有以下信息:

    {"hdrs": ["Make","Model","Year"],
     "data" : [ 
       {"Make":"Honda","Model":"Accord","Year":"2008"}
       {"Make":"Toyota","Model":"Corolla","Year":"2008"}
       {"Make":"Honda","Model":"Pilot","Year":"2008"}]
    }
    

    我有一个“hdrs”的名字(即“make”),我怎样才能引用 data 数组实例? 好像 data["Make"][0] 应该有效……但无法获得正确的引用

    编辑

    不好意思含糊不清。我可以循环通过 hdrs 获取每个HDR名称,但我需要使用 HDRS 查找中的所有数据元素 数据 (不确定这是不是更好的解释)。我会把它放在一个变量里 t 因为它是JSON(感谢重新标记),所以我希望能够引用如下内容: t.data[hdrs[i]][j]

    9 回复  |  直到 17 年前
        1
  •  3
  •   Jared xxtesaxx    17 年前

    我不得不稍微修改一下你的代码:

    var x = {"hdrs": ["Make","Model","Year"],
             "data" : [ 
               {"Make":"Honda","Model":"Accord","Year":"2008"},
               {"Make":"Toyota","Model":"Corolla","Year":"2008"},
               {"Make":"Honda","Model":"Pilot","Year":"2008"}]
            };
    
            alert( x.data[0].Make );
    

    编辑:响应您的编辑

    var x = {"hdrs": ["Make","Model","Year"],
             "data" : [ 
               {"Make":"Honda","Model":"Accord","Year":"2008"},
               {"Make":"Toyota","Model":"Corolla","Year":"2008"},
               {"Make":"Honda","Model":"Pilot","Year":"2008"}]
            };
    var Header = 0; // Make
    for( var i = 0; i <= x.data.length - 1; i++ )
    {
        alert( x.data[i][x.hdrs[Header]] );
    }           
    
        2
  •  1
  •   Domenic    17 年前

    那么,像这样?

    var theMap = /* the stuff you posted */;
    var someHdr = "Make";
    var whichIndex = 0;
    var correspondingData = theMap["data"][whichIndex][someHdr];
    

    如果我能正确理解你的话,那就行了…

        3
  •  1
  •   Kent Fredric    17 年前
    var x = {"hdrs": ["Make","Model","Year"],
     "data" : [ 
       {"Make":"Honda","Model":"Accord","Year":"2008"}
       {"Make":"Toyota","Model":"Corolla","Year":"2008"}
       {"Make":"Honda","Model":"Pilot","Year":"2008"}]
    };
    
    x.data[0].Make == "Honda"
    x['data'][0]['Make']  == "Honda"
    

    您的数组/哈希查找向后进行:)

        4
  •  1
  •   noah    17 年前

    我不确定我理解你的问题,但是…

    假设上面的json是var obj,您需要:

    obj.data[0]["Make"] // == "Honda"
    

    如果您只想引用第一个头引用的字段,它将类似于:

    obj.data[0][obj.hdrs[0]] // == "Honda"
    
        5
  •  1
  •   just mike    17 年前

    首先,您忘记了数据数组项中的尾随逗号。

    尝试以下操作:

    var obj_hash = {
        "hdrs": ["Make","Model","Year"],
        "data" : [
            {"Make":"Honda","Model":"Accord","Year":"2008"},
            {"Make":"Toyota","Model":"Corolla","Year":"2008"},
            {"Make":"Honda","Model":"Pilot","Year":"2008"},
        ]
    };
    
    

    var ref_data = obj_hash.data;

    alert(ref_data[0].Make);

    @肯特·弗雷德里克:注意最后一个逗号不是严格需要的,但是允许你更容易地移动周围的行(即,如果你在最后一行之后移动或添加,并且没有逗号,你必须特别记住添加一个。我认为最好总是有尾随逗号。)
        6
  •  0
  •   Adam Weber    17 年前

    可能尝试数据[0].make

        7
  •  0
  •   Stephen Wrighton    17 年前

    关上,你会用

    var x = data[0].Make;
    var z = data[0].Model;
    var y = data[0].Year;
    
        8
  •  0
  •   DGM    17 年前

    所显示的代码在语法上不正确;它需要一些逗号。我要用这个:

    $foo = {"hdrs": ["Make","Model","Year"],
     "data" : [ 
       {"Make":"Honda","Model":"Accord","Year":"2008"},
       {"Make":"Toyota","Model":"Corolla","Year":"2008"},
       {"Make":"Honda","Model":"Pilot","Year":"2008"}]
    };
    

    然后我可以访问以下数据:

    $foo["data"][0]["make"]
    
        9
  •  0
  •   Jay Corbett    17 年前

    在答案的帮助下(并且在得到内外循环正确之后),我让这个工作:

    var t = eval( "(" + request + ")" ) ;
    for (var i = 0; i < t.data.length; i++) {
     myTable +=    "<tr>";
     for (var j = 0; j < t.hdrs.length; j++) {
      myTable += "<td>" ;
       if (t.data[i][t.hdrs[j]] == "") {myTable += "&nbsp;" ; }
        else { myTable += t.data[i][t.hdrs[j]] ; }
      myTable += "</td>";
     }
     myTable +=    "</tr>";
    }