Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 访问数组值显示未定义_Javascript - Fatal编程技术网

Javascript 访问数组值显示未定义

Javascript 访问数组值显示未定义,javascript,Javascript,我有一个数组 var data = [{"fname":"john","sname":"doe","id":"2"},{"country":"England"}]; 我试着用这个迭代: var comment=''; for(var i = 0; i < data.length; i++) { comment = data[i]; } alert(comment.fname); alert(comment.sname); alert(comment.id); alert(c

我有一个数组

var data = [{"fname":"john","sname":"doe","id":"2"},{"country":"England"}];
我试着用这个迭代:

var comment='';

for(var i = 0; i < data.length; i++) {
    comment = data[i];

}
alert(comment.fname);
alert(comment.sname);
alert(comment.id);
alert(comment.country);
只有
comment.country
显示正确,其余显示
undefined

var data ='[{"fname":"john","sname":"doe","id":"2"},{"country":"England"}]';
此数组包含2个不同的对象。如果同一个对象有fname、sname、id和country,您可能应该将它们合并为一个

var data ='[{"fname":"john","sname":"doe","id":"2","country":"England"}]';

您的循环每次都会覆盖
注释
,因此最后它只包含
数据的最后一个元素
。如果希望
comment
包含来自其他元素的属性,则需要在循环过程中提取它们

comment = {}
$.each(data, function(i, obj) {
    $.extend(comment, obj); // Merge the properties if each element into comment
});
刚刚得到它

我没有更改服务器端的代码

var comment=[];
$.each(data, function(key, val) {
    $.each(val, function(index, value){
            comment[index]=value;
    });
}); 
以及显示的所有值

alert(comment.fname);
alert(comment.sname);
alert(comment.id);
alert(comment.country);

您需要调用
$.parseJSON()
将字符串转换为数组。解决此问题后,您会遇到另一个问题。在循环结束时,
comment
将只包含数组的最后一个元素。该元素只有
country
,而不是
fname
sname
id
。它是通过AJAX从服务器端发送的数据。您是否在AJAX调用中使用了
数据类型:“json”
,以便自动解析它?如果它已经被解析了,为什么要将它显示为字符串?好的,您的实际问题是您正在用它来破坏服务器端的数据。相反,您可能应该执行
$user[0]['country']='England'。这不是数组,而是字符串。我假设他在遍历字符串之前先解析字符串。我知道var foo=“a_string”是一个字符串。你说得对。他说他得到了comment.country的正确结果,因此必须对其进行解析。