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
How to foreach into a multidimensional array with jQuery? Strange behaviour
提问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. Arrays
and Objects
(Hashes) are different things not as php does.
那不是多维数组,而是无效代码。Arrays
和Objects
(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])
}
}
});