2

我有一个数组,我试图循环创建一种特定于我当前页面的新型数组。

我的数组如下所示:

 //$_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);

现在在 console.log 我得到这个:

[undefined × 7, Array[4]
 0: "1"
 1: "avatar.jpg"
 2: "1"
 3: "Andrew"
 length: 4
 __proto__: Array[0]
 ]

我想知道为什么它说未定义的x7?

4

2 回答 2

1

为什么不使用 JSON?

var stats = <? echo json_encode($_SESSION['data'][5]); ?> ;

你现在可以正常迭代了。

for (x in stats){
     console.log(stats[x]);
}

更新

是的,你会得到'x7 undefined'。这是因为您直接设置了 js 数组中的第 8 个条目。(for循环迭代中的key == 7)前7个条目本质上是未定义的。

如果要使用前几个索引,请使用array.push(..)或手动设置最后一个索引array[array.length] = new_object;

于 2012-06-03T04:57:08.600 回答
0

首先尝试将您的对象序列化为 JSON:

var stats = <? echo json_encode($_SESSION['data'][5]); ?> ;

接着...

问题是因为您想创建一个包含 7 个键的数组。例如:

var boo = [];
boo[7] = new Array();

因此 JavaScript 将创建一个包含 7 个部分的数组,然后您将拥有一个包含 7 个undefined值的数组!

实际上你需要一个objectnot 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);

我只是将my_datafrom更改arrayobject.

于 2012-06-03T05:15:55.060 回答