JavaScript数组元素怪异

时间:2016-01-29 04:15:28

标签: javascript jquery arrays

这是我的第一个问题。

我有一个AJAX返回JSON字符串,在function.done之后,通过:

var arData = [];
$.each(response, function(key, value) {
     var temp = [value[0], value[1]];
    arData.push(temp);
    //console.log(temp);
});
console.log(arData);

当我打印var temp时,结果很正常,类似于[“BUFFER STOK”,497206627]。 但是,当我打印出arData变量时,生成的控制台日志如下:

resulting array

一系列二维数组如何显示长度为4,元素为0,1和3?

编辑:这是响应对象的日志: resulting response log

***** UPDATE *****

我正试图重新提出我的问题。 我正在使用ajax成对获取json数据:[[“data 1”,int value 1],[“data 2”,int value 2],...]。 根据这些数据,我打算使用arData.push([“data 1”,int value 1]);来为每对json数据创建一个具有相同值的javascript数组。

这是我的原始代码:

        var arData = [];
        $.ajax({
          cache: false,
          type: 'get',
          url: 'dtsearch4.php',
          data: {type : 2},
          dataType: 'json',
          async: false
        })
        .done(function(response){ 
          $.each(response, function(key, value) {
             $.each(v,function(key, value){
                  //var temp = [value[0], value[1]];
                  arData.push([value[0], value[1]]);
              });
          });

但是,生成的数组是这样的:

v[Array[2], Array[2],[Array[2],...] v0: Array[4] 0: "APBD-I" 1: 302462864 3: NaN length: 4 __proto__: Array[0] v1: Array[4] v2: Array[4]

=>数组[4]和元素编号0,1和3是什么?没有2号?

虽然我想要的是一个包含2个元素的数组:

v[Array[2], Array[2],[Array[2],...] v0: Array[2] 0: "APBD-I" 1: 302462864 length: 2 __proto__: Array[0] v1: Array[2] v2: Array[2]

3 个答案:

答案 0 :(得分:2)

你必须运行两次循环。

$.each(v, function(v_key, v_value) {
     $.each(v_key,function(key, value){
          arData.push([value[0], value[1]]);
      });
});

1st loop will take the values like v0, v1, v2. 
second loop will take the values of v0 like 0,1,3,length,__proto__

答案 1 :(得分:1)

通常它的工作正常,

 <html>
    <head>
    <script>
    function callthis(){
    var arData = [];
    {
        var value=[];
         value[0]="vasim";
         value[1]="vanzara";
         var temp = [value[0], value[1]];
        arData.push(temp);
        //console.log(temp);
    }
    console.log(arData);
    }
    </script>
    </head>
    <body>
        <input type="button" onclick="callthis()" value="Click me">
    </body>
    </html>

您可以使用JavaScript代替Jquery进行呼叫服务, http://www.javascriptkit.com/dhtmltutors/ajaxgetpost.shtml

答案 2 :(得分:-1)

在此代码中,jQuery将为response对象中的每个元素调用您的回调函数。 temp的生命周期仅存在于该函数结束之前。因此,您只能在console.log(temp)调用中看到长度为2的数组,因为它没有以前的值。

$.each(response, function(key, value) {
    var temp = [value[0], value[1]];
    arData.push(temp);
    //console.log(temp);
});