2016-01-29 4 views
4

Это мой первый вопрос здесь.Элементы элементов массива элементов JavaScript

У меня есть возвращающаяся строка 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, результат вполне нормально, что-то вроде [ "BUFFER СТОКА", 497206627 ]. Но, когда я распечатай переменную arData, полученный лог консоли выглядит следующим образом:

resulting array

Как такова, что серия из 2-х мерных массивов показывает, как 4 в длину, с элементом 0, 1, и 3?

Edit: Это журнал объекта ответа: resulting response log

***** ***** UPDATE

Я пытаюсь повторно слово мой вопрос. Я использую ajax для получения json-данных в парах: [["data 1", int value 1], ["data 2", int value 2], ...]. Из этих данных я намерен создать массив javascript с тем же значением, используя arData.push (["data 1", int value 1]) ;, для каждой пары json-данных.

Это мой исходный код:

 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]

+0

Можете ли вы разместить образцы значений для 'response'? – RRK

+0

Я редактирую вопрос, чтобы включить ответ. – rherry

+0

что входит в ответ. (Не показывать мне изображение) – Monty

ответ

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__ 
+0

Спасибо, @Monty. Да, нужно иметь две петли. – rherry

-1

В этом коде JQuery будет вызывать функцию обратного вызова для каждого элемента в response объекта. temp Срок службы существует только до конца этой функции. Таким образом, вы видите только массив с длиной 2 в вызове console.log(temp), потому что он не имеет своего предыдущего значения.

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

Не уверен, что я следую. Я знаю, что временное время жизни ограничено. Однако arData объявляется вне области видимости. Должны ли данные внутри temp быть перенесены в arData? – rherry

+0

'arData' получает значение' temp', добавляя к нему вызов 'arData.push (temp);' –

+0

Позвольте мне попробовать сценарий и обновить его позже. – rherry

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

Смежные вопросы