Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/364.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 我的JS数组未定义的问题x 7_Javascript - Fatal编程技术网

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