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

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/6386438/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-23 21:30:53  来源:igfitidea点击:

How to foreach into a multidimensional array with jQuery? Strange behaviour

javascriptjqueryarraysmultidimensional-arrayeach

提问by Antoine Kociuba

Just if someone can explain me why the alertbox doesn't return an array but empty ??

只是如果有人可以解释我为什么警报框不返回数组而是空的?

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);
});

Actually, I will have this kind of array from a webservice and I need to loop into this array to retrieve datas.

实际上,我将从网络服务中获得这种数组,我需要循环到该数组中以检索数据。

But I don't understand why the loop doesn't work properly.

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

Thanks you in advance guys.

提前谢谢你们。

回答by KARASZI István

That's not a multidimensional array, but an invalid code. Arraysand Objects(Hashes) are different things not as php does.

那不是多维数组,而是无效代码。ArraysObjects(Hashes) 是不同的东西,不像 php 那样。

So at the top you should write the following:

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

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

And you could iterate over it as you did:

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

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

回答by Angel M.

if you try: console.log(response) ... you'll see the array is empty, it seems the array is not well formed.

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

why don't you use JSON format instead?

为什么不使用 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);
}

回答by Nicola Peluchetti

You should not use arrays like this in Javascript. Arrays are numerically indexed. If you write

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

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

you are adding a property to response[1] array

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

EDIT - i've read a little better your coment. It states:

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

//FYI: The output is an array of key value pairs (e.g. response[0].Id), the keys being:

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

So you have an array of objects.

所以你有一个对象数组。

This maps the data you will receive.

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

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

and you can access them like this:

你可以像这样访问它们:

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