2015-05-22 3 views
0

У меня есть одномерный массив, который я хочу преобразовать в двумерный массив. Итак, я использую для этого цикл. Чтобы доказать, что каждый индексный массив введен правильно, я печатаю его на экране. Но он печатает только первую строку, после чего он выдает ошибкуПреобразование одного размерного массива в два размера

Uncaught TypeError: Cannot set property '0' of undefined

Я слышал, что в JS массив несколько отличается по сравнению с другими языками (я знаком с Java). Так что, может быть, я каким-то образом его смутил, но понятия не имею.

Вот мой код.

var k = 0; 
 
//move tha matrix from one dimensional matrix to two dimensional 
 
var cubes = new Array([]); 
 
for(var i = 0; i < n; i++){ 
 
\t for(var j = 0; j <= n; j++){ 
 
\t \t cubes[i][j]=matriks[k]; 
 
\t \t document.write("["+ i +"]["+ j +"] = "+cubes[i][j].value + " "); 
 
\t \t k++; 
 
\t } 
 
}

Матрица представляет собой один одномерный массив. Кубы - это двумерный массив, в который я хочу поместить матрицу.

+0

в кубиках первой строке и втором ряду, что нужно заменить? В первых элементов строки mateix и во второй строке пустой? – Sarkhan

+0

Возможный дубликат [Как преобразовать простой массив в двумерный массив (матрицу) в javascript (или jquery)] (http://stackoverflow.com/questions/4492385/how-to-convert-simple-array-into- two-dimension-arraymatrix-in-javascript-or) – AlvaroAV

+0

Если один из ответов ниже ответил на ваш вопрос о 'TypeError', как работает SO, вы должны« принять »ответ, нажав галочку рядом с ним. [Подробнее здесь] (/ help/someone-answers) –

ответ

0

Проблема заключается в том, что вы не указываете JavaScript, что объекты, хранящиеся во внешнем массиве, должны быть массивом. Когда вы пытались использовать внутренние массивы, вы еще не инициализировали их, поэтому вы становились неопределенными. Чтобы исправить это, вы можете просто изменить свой код на:

var k=0; 
var cubes = []; 
var i, j; 
for(i=0; i<n; i++){ 
    cubes[i] = []; 
    for(j=0; j<=n; j++){ 
     cubes[i][j]=matriks[k]; 
     document.write("["+i+"]["+j+"] = "+cubes[i][j].value+" "); 
     k++; 
    } 
    j=0; 
} 
+1

* «Проблема в том, что вы не говорите JavaScript, какой тип объекта должен хранить внешний массив» * А? JavaScript слабо типизирован (обычно, он [сейчас] haev 'Int32Array' и т. Д.). Вышеприведенный код верен, но объяснение на самом деле не имеет большого смысла. –

+0

Что я имею в виду, так это то, что вы не можете просто использовать переменную, как если бы это был массив, если это не тип массива, правильно? –

+0

OP '' кубы' ** - это массив. Итак, первая запись. –

0

объявление о двухразмерным массива «кубов» не является правильным, как вы делаете, вы должны инициализировать каждую строку вашей матрицы, это должно вызвать ошибку

var k=0; 
//move tha matrix from one dimensional matrix to two dimensional 
var cubes = []; 
for(var i=0; i<n; i++){ 
    cubes[i] = []; 
    for(var j =0; j<=n; j++){ 
     cubes[i][j]=matriks[k]; 
     console.log("value at ", i, j, " = ", cubes[i][j]); 
     k++; 
    } 
} 
0

Эта линия:

var cubes = new Array([]); 

создает массив с одним входом в нее, что другой массив. Он не создает многомерный массив (JavaScript их не имеет, он имеет массивы массивов). Это означает, что в cubes отсутствует массив, за исключением ввода [0].

Чтобы это исправить, изменить, что

var cubes = []; 

и добавить

cubes[i] = []; 

только после того, как

for(var i=0; i<n; i++){ 

для создания каждого подмассив.

т.д .:

var k=0; 
//move tha matrix from one dimensional matrix to two dimensional 
var cubes = []; 
for(var i=0; i<n; i++){ 
    cubes[i] = []; 
    for(var j =0; j<=n; j++){ 
     cubes[i][j]=matriks[k]; 
     document.write("["+i+"]["+j+"] = "+cubes[i][j].value+" "); 
     k++; 
    } 
} 
Смежные вопросы