2012-05-04 2 views
0

Моя цель - перебрать таблицу с идентификатором ajaxResponse1 и сохранить значения COLUMN в отдельном массиве. Каждая из записей в значенияхArr будет столбцом, содержащим массив отдельных значений.Как создать многомерный массив в Javascript?

Я попытался использовать новый массив вместо нового объекта, но я все еще не получаю никаких сообщений, выводимых на экран. Должен ли я использовать некоторую комбинацию .push, чтобы получить каждое новое значение столбца в соответствующий массив? Надеюсь, это понятно. Есть идеи? Благодаря!

var valuesArr = new Object(); 

$('#ajaxResponse1 tr').each(function() { 
    var colNum = 0; 
    $('th, td', this).each(function() { 
     valuesArr[colNum] = valuesArr[colNum].push($(this).html()); 
     colNum++; 
    }); 
}); 

alert(JSON.stringify(valuesArr)); 
+0

[Этот вопрос] (http://stackoverflow.com/q/2808926/ 901048) может помочь вам. – Blazemonger

+0

Попробуйте помещать свое предупреждение внутри цикла, чтобы вы могли проверить, что происходит в массиве – mafue

+0

_not_, дубликат IMHO, так как это имеет дополнительное усложнение создания _transpose_ исходной таблицы. – Alnitak

ответ

2

Вы не можете нажимать что-то на массив до тех пор, пока этот массив не будет существовать.

Таким образом, в каждой итерации вашего внутреннего цикла, если начальный массив не существует, вы должны создать его:

var valuesArr = []; 

$('#ajaxResponse1 tr').each(function() { 
    $('th, td', this).each(function(i, el) { // nb: implicit column number 
     var html = $(this).html(); 
     if (i in valuesArr) { 
      valuesArr[i].push(html); 
     } else { 
      valuesArr[i] = [ html ]; // new array with one element 
     } 
    } 
}); 
+0

Работал как шарм. Я НИКОГДА бы не догадался, что это проблема. Спасибо за помощь! – Andrew

+1

@ Anjroo см. Обновленный пример кода, который исключает переменную 'colNum' – Alnitak

1

Метод push() добавляет новые элементы в конец массива и возвращает новую длину. Итак, попробуйте изменить его:

valuesArr[colNum].push($(this).html()); 

Просто удалите =

Кроме того, вы должны инициализировать массив до первого раза, используя его, попробуйте:

valuesArr[colNum] = valuesArr[colNum] ? valuesArr[colNum] : []; 

Вы найдете полную работу пример http://jsfiddle.net/57A9z/

0
var valuesArr = []; 
var r = 0; 
var c = 0; 

$('#ajaxResponse1 tr').each(function() { 
    valuesArr[r] = []; 
    $('th, td', this).each(function() { 
     valuesArr[r][c] = $(this).html(); 
     c++; 
    }); 
    c = 0; 
    r++; 
}); 
+0

Вы создаете запись для каждой строки, а не для каждого столбца. – Alnitak

+0

Да, я неправильно понял вопрос. Глядя на код, я думал, что это имеет больше смысла таким образом, но похоже, что требования были разными. ура :) – mihai

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