Javascript 我的JS数组未定义的问题x 7
我有一个数组,我正试图循环通过它来创建一个特定于我当前页面的新数组类型 我的数组如下所示:Javascript 我的JS数组未定义的问题x 7,javascript,Javascript,我有一个数组,我正试图循环通过它来创建一个特定于我当前页面的新数组类型 我的数组如下所示: //$_SESSION['data'] = Array ( [0] => 1 [1] => 0 [2] => Tom [8] => 1 [4] => 1 [5] => Array ( [7] => Arr
//$_SESSION['data'] =
Array (
[0] => 1
[1] => 0
[2] => Tom
[8] => 1
[4] => 1
[5] => Array (
[7] => Array (
[0] => Andrew
[1] => 1
[2] => 1
[4] => 0
[5] => avatar.jpg
[6] => 1
)
)
[6] => Array ( [0] => 1
[1] => 2
)
)
因此,在我的JS文件中,我有以下内容:
var stats = <? echo json_encode($_SESSION['data'][5]); ?> ; //this is the array
my_data = new Array();
for(var key in stats){
if(key in my_data){} else { //prevent double entry
my_data[key] = new Array();
my_data[key][0] = stats[key][6];
my_data[key][1] = stats[key][5];
my_data[key][2] = stats[key][2];
my_data[key][3] = stats[key][0];
}
}
console.log(my_data);
我想知道为什么它说的是未定义的x7 为什么不使用JSON
var stats = <? echo json_encode($_SESSION['data'][5]); ?> ;
更新 是的,您将得到“x7未定义”。这是因为您正在直接设置js数组中的第8个条目。(for循环迭代中的key==7)前7个条目基本上是未定义的
如果要使用前几个索引,请使用
array.push(..)
或使用array[array.length]=new\u对象手动设置最后一个索引代码>首先尝试将对象序列化为JSON:
var stats = <? echo json_encode($_SESSION['data'][5]); ?> ;
所以JavaScript将创建一个包含7个部分的数组,然后您将得到一个包含7个未定义值的数组
实际上,您需要的是对象
而不是数组
请尝试以下代码:
my_data = {};
for(var key in stats){
if(!my_data[key]) { //prevent double entry
my_data[key] = [];
my_data[key][0] = stats[key][6];
my_data[key][1] = stats[key][5];
my_data[key][2] = stats[key][2];
my_data[key][3] = stats[key][0];
}
}
console.log(my_data);
我刚把my_data
从array
改为object
,它显示了什么:array([7]=>array([0]=>Andrew[1]=>1[2]=>1[4]=>0[5]=>avatar.jpg[6]=>1)),这与使用print\u r()有关。戴夫:你显然是在省略或更改代码,因为该代码中有一个额外的)
,这将导致PHP中的语法错误。@Len该注释中有两个开括号和两个闭括号(额外的在哪里)?仔细看,数组中有一个数组。不管打印什么,JavaScript是什么样子的?试过了,但似乎没有什么变化。我的控制台中仍然有7个未定义。log=/['data'][5]保持:{“7”:{“0”:“Andrew”,“1”:“1”,“2”:“1”,“4”:“0”,“5”:“avatar.jpg”,“6”:“1”}我同意你在JSON序列化方面的观点,但是对于创建一个新对象,我认为他应该使用object而不是array。不管怎样,他对它的迭代方式将保持不变。@StruchMaster hi-我今天不在,所以才刚刚回复。。。array[array.length]不只是定义一个键的编号吗?这有点让人困惑。。我对它不熟悉
var stats = <? echo json_encode($_SESSION['data'][5]); ?> ;
var boo = [];
boo[7] = new Array();
my_data = {};
for(var key in stats){
if(!my_data[key]) { //prevent double entry
my_data[key] = [];
my_data[key][0] = stats[key][6];
my_data[key][1] = stats[key][5];
my_data[key][2] = stats[key][2];
my_data[key][3] = stats[key][0];
}
}
console.log(my_data);