【问题标题】:How to foreach into a multidimensional array with jQuery? Strange behaviour如何使用 jQuery foreach 进入多维数组?奇怪的行为
【发布时间】:2011-09-17 04:54:02
【问题描述】:

如果有人能解释一下为什么警报框不返回数组而是空的??

var response = new Array();
response[0] = new Array();
response[1] = new Array(); 
response[2] = new Array();  

response[0]["Id"] = 1;
response[0]["StreetAddress"] = 'xxx';
response[0]["Place"] = 'yyy';

response[1]["Id"] = 2;
response[1]["StreetAddress"] = 'xxx';
response[1]["Place"] = 'yyy';

response[2]["Id"] = 3;
response[2]["StreetAddress"] = 'xxx';
response[2]["Place"] = 'yyy';

$.each(response , function(key1, value1) {
    alert(value1);
});

实际上,我会从 web 服务中得到这种数组,我需要循环到这个数组中来检索数据。

但我不明白为什么循环不能正常工作。

提前谢谢你们。

【问题讨论】:

    标签: javascript jquery arrays multidimensional-array each


    【解决方案1】:

    那不是多维数组,而是无效代码。 ArraysObjects(哈希)在 JavaScript(和大多数其他语言)中是不同的东西,而不是在 PHP 中。

    所以在顶部你应该写以下内容:

    var response = new Array();
    response[0] = new Object();
    response[1] = {}; // it's the same new Object()
    response[2] = new Object();
    

    你可以像以前那样迭代它:

    $.each(response, function (index, obj) {
        $.each(obj, function (key, value) {
            console.log(key);
            console.log(value);
        });
    });
    

    【讨论】:

      【解决方案2】:

      如果你尝试:console.log(response) ...你会看到数组是空的,看起来数组格式不正确。

      为什么不使用 JSON 格式呢?

      var response = [{
          "Id":"1",
          "StreetAddress": "xxx",
          "Place":"yyy"
      },
      {
          "Id":"2",
          "StreetAddress": "xxx2",
          "Place":"yyy2"
      },
      {
          "Id":"3",
          "StreetAddress": "xxx3",
          "Place":"yyy3"
      }
      ]
      console.log(response);
      //you'll get an object: [Object { Id="1", StreetAddress="xxx", Place="yyy"}, Object { Id="2", StreetAddress="xxx2", Place="yyy2"}, Object { Id="3", StreetAddress="xxx3", Place="yyy3"}]
      //iterate over
      for(var x=0; x < response.length; x++){
          console.log("ID: " + response[x].Id + " StreetAddress: " + response[x].StreetAddress + " Place: " + response[x].Place);
      }
      

      【讨论】:

        【解决方案3】:

        您不应该在 Javascript 中使用这样的数组。数组是数字索引的。如果你写

        response[1]["Id"] = 2; 
        

        您正在向 response[1] 数组添加一个属性

        编辑 - 我读过你的评论好一点。它指出:

        //仅供参考:输出是一个键数组 值对(例如 response[0].Id), 键是:

        所以你有一个对象数组。

        这会映射您将收到的数据。

        var response = new Array;
        response[0] = new Object();
        response[1] = new Object(); 
        response[2] = new Object();  
        
        response[0]["Id"] = 1;
        response[0]["StreetAddress"] = 'xxx';
        response[0]["Place"] = 'yyy';
        
        response[1]["Id"] = 2;
        response[1]["StreetAddress"] = 'xxx';
        response[1]["Place"] = 'yyy';
        
        response[2]["Id"] = 3;
        response[2]["StreetAddress"] = 'xxx';
        response[2]["Place"] = 'yyy';
        

        您可以像这样访问它们:

        jQuery.each(response, function(key, value){
                 for (key2 in value[key]){
                    if (value[key].hasOwnProperty(key2)){
                    alert(mine[key2])
                    }
                 }
             });
        

        【讨论】:

        • 实际上,我想使用此服务:postcodeanywhere.co.uk/support/webservices/PostcodeAnywhere/… 在页面顶部,javascript 函数代码示例说: // PUT YOUR CODE HERE //FYI:输出是一个数组键值对(例如 response[0].Id),键是: //Id //StreetAddress //Place 所以我只是想构建一个示例数组,开始实现我的脚本。但是我的数组似乎是错误的。如果有人能给我正确的数组语法。谢谢
        • @Antoine 我修改了答案
        猜你喜欢
        • 2015-03-18
        • 2023-04-06
        • 1970-01-01
        • 1970-01-01
        • 2023-03-27
        • 2012-01-27
        • 2019-03-02
        • 2011-06-25
        相关资源
        最近更新 更多