如何使用 jQuery foreach 进入多维数组?奇怪的行为

Posted

技术标签:

【中文标题】如何使用 jQuery foreach 进入多维数组?奇怪的行为【英文标题】:How to foreach into a multidimensional array with jQuery? Strange behaviour 【发布时间】: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 服务中得到这种数组,我需要循环到这个数组中来检索数据。

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

提前谢谢你们。

【问题讨论】:

【参考方案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 我修改了答案

以上是关于如何使用 jQuery foreach 进入多维数组?奇怪的行为的主要内容,如果未能解决你的问题,请参考以下文章

如何使用php在foreach循环中获取多维数组的键? [复制]

PHP如何将嵌套的foreach变成数组的数组(多维数组)

不使用foreach递归遍历多维数组

取消设置多维数组中的数据

如何使用 Codeigniter 和 Jquery 验证多维数组

PHP:使用 foreach 从多维数组中删除元素(按键)