2016-11-14 3 views
1

Я думаю, что Im неправильно понял что-то здесь - я обычно работаю на PHP и думаю, что у меня что-то малое. Мой последний массив tmp пуст и отображается как «,,,,,,,,,,,,,,,,». Мне кажется, что мой tmp-массив может быть опустошен где-то, или область по какой-то причине сбрасывается. Я использую это как координаты из таблицы, где вы можете выбрать строки таблицы и опубликовать их в веб-сервисе, но мой массив кажется ошибочным.Многомерный массив Javascript пуст

var length = $("#arrayCount").html(); 
var letters = ["A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"]; 
var col = getSelectedColumn(); //for example sake lets say "B" is the selected column 
var row = getSelectedRow(); //selected rows will be from "11" - "16" 
var columnIndexStart = letters.indexOf(col[0]); 
var tmp = []; 
for(var i = row[0]; i <= row[1]; i++) //rows[0] = 11 and rows[1] = 16 
{ 
    tmp[i] = []; 
    for(var j = columnIndexStart; j < letters.length; j++) //columns and starts at index 1 if we work with "B" 
    { 
     var val = $("#" + i + "_" + letters[j]).html(); //using the row and letters as the associated DOM elements ID. Easier to retrieve it's HTML then. 
     if(val != undefined) 
     { 
      console.log("Index [" + i + "]['" + letters[j] + "'] = " + val); //works perfectly and prints as it should. 
      tmp[i]['"'+letters[j]+'"'] = val; //using quotes to save letters? Is this preferred? 
     } 
    } 
} 
console.log('Final Array: ' + tmp); //empty?? 
console.log('Final Array: ' + tmp[14]['G']); //testing HTML output. But is undefined. 
return tmp; 

Любая помощь будет принята с благодарностью. Отредактировано: Пример вывода консоли. enter image description here

+0

Вы уверены, что выбралиColumn и getSelectedRow работают хорошо? – GiuServ

+0

Добавлен пример вывода. – Muppet

+0

это просто пример? Я имею в виду. индекс [14] ['G'] существует? – GiuServ

ответ

1

Мой последний TMP массив пуст и отображается как «,,,,,,,,,,,,,,,,»

С нечисловом индекс вы устанавливаете поле объекта, а не элемент для индекса.

Если у вас будет двумерный числовой массив с числовыми индексами, как следующее:

var tmp = [[1,2,3], [1,2,3]]; 

после console.log('tmp = ' + tmp); вы, очевидно, получить выходную строку как:

tmp = 1,2,3,1,2,3 

Потому что, когда вы пытаетесь для преобразования массива в строку он преобразует его в строку и представляет их запятыми.

Однако, когда вы пытаетесь установить элемент с нечисловым индексом, вы устанавливаете поле этого объекта.

var tmp = []; 
tmp['A'] = 123; 
console.log("tmp = " + tmp); // tmp = 
console.log(tmp.A); //123 

Так, console.log в вашем случае хорошо работает - это сериализации все элементы двумерного массива. Но ни один массив второго уровня не имеет сохраненных значений, он имеет только поля, которые не включены в строковое представление массива.

Вы получаете набор запятых, потому что каждый дополнительный массив из массива tmp не содержит никакого элемента, поэтому это строковое представление представляет собой пустую строку. Каждый вспомогательный массив содержит требуемые данные в своих полях.

Когда вы выполняете операцию суммирования строки и объекта, вы вынуждаете объект преобразовывать в строковое представление. Вместо этого рекомендуется использовать console.log(yourObj) - он будет записывать весь объект без преобразования его в строку.

// использование цитат для сохранения букв? Является ли это предпочтительным?

No, "A" и A - это разные идентификаторы.

var s = new Object(); 
s['"A"'] = 123; 
console.log(s['A']); //undefined 
console.log(s['"A"']); //123 

Кроме того, если вы установите поля в кавычках - вы не можете получить поле в обычном стиле:

console.log(s."A"); //syntax error : expected identifier after '.' 
+0

Вы, сэр, бог! Спасибо, я не знал, что он пытается преобразовать объект в строку (в консоли), следовательно, пустой массив. – Muppet

+0

@Muppet Я обновил ответ из-за вашего вопроса о котировках для сохранения писем. Думаю, это будет полезно для вас. –

0

Вы также можете просто сделать это (использование запятой, а не плюс):

console.log('Final Array: ', tmp); //empty?? 
console.log('Final Array: ', tmp[14]['G']); 
Смежные вопросы