2013-08-13 4 views
-1

Я прочитал это Swap rows with columns (transposition) of a matrix in javascript Однако это не сработало для меня (потому что я все еще ступи).Преобразование столбцов в строки в javascript

Есть номера массивов каждый индивидуально, Колум так:

id [1, 2, 3] 
caption [one, two, three] 
title [One, Two, Three] 

Я хочу, чтобы преобразовать столбцы грести:

arr= [1, one, One] 

...

Некоторый код

 var res = []; 

     for(i in this.fields) { 

      for(j in this.fields[i].value) { 

       res[j][i] = this.fields[i].value[j]; 

      } 

     } 

это дает мне «TypeError: невозможно преобразовать undefined в объект»

В php этот метод работает нормально, но может кто-нибудь указать мне, как это сделать в js. Заранее спасибо.

UPDATE для Упрощение

var arr = []; 
arr[0] = []; 

arr[6][0] = 5; 
/* 
Exception: can't convert undefined to object 
@Scratchpad/1:4 
*/ 

Когда мы просканировать общую строку мы итерацию с индексами, как 0-0, 0-1, 0-2 до конца из-ряда, когда начинается снова 1-0 и так далее , Но здесь мне нужно 0-0, 1-0, 2-0 конца колокола и снова 1-0, 1-1, 1-1 ...

UPDATE для "this". Просто добавьте Cople строк:

   console.log(this.fields[i].value[j]); 
       console.log('indexes: i='+i, 'j='+j); 

и, как вы могли бы видеть, нет неопределенных значений

4 
indexes: i=0 j=0 
1 
indexes: i=1 j=0 
1 
indexes: i=2 j=0 
one 
indexes: i=3 j=0 
One 
indexes: i=4 j=0 
+1

Что такое 'this' в этом контексте? – Mathletics

+0

Показать структуру 'this.fields'. – DontVoteMeDown

+0

Как описано выше, это 2-х массив в полях [i] .value [j]. Просто я хочу, чтобы заставить JS записывать значение в произвольный индекс массива. – kostya

ответ

0

наверняка одной ошибки внутри цикла. На первой итерации res[j] существует, но внутри внутреннего цикла res[j][i] не определен и выдает ошибку. Вы можете исправить это, проверив, существует ли элемент:

var res = []; 

for(i in this.fields) { 

    for(j in this.fields[i].value) { 

     if(!res[j]) { res[j] = []; } 

     res[j][i] = this.fields[i].value[j]; 

    } 

} 
+0

Спасибо. Таким образом, я сделал это, но без условий и оставил все элементы пустыми, кроме последнего. Еще раз спасибо. Теперь это работает. – kostya

1

В исходном коде есть несколько ошибок. Мы не знаем, как ваше значение this.fields выглядит, но ради вашего фрагмента кода пусть это выглядит так:

this.fields = [ 
    { value: [1, 2, 3] }, 
    { value: [4, 5, 6] }, 
    { value: [7, 8, 9] } 
] 

Если this.fields переменные выглядит так, вы не так далеко от решения , Ваше сообщение об ошибке говорит TypeError: can't convert undefined to object, поэтому я предполагаю, что ваша переменная не похожа на описанную.

Когда мы преобразуем ваши данные в форму, которая похожа на мой пример, вы не так далеко от решения в своем фрагменте кода. Проблема в res не знает, что ее второе измерение должно состоять из массивов, потому что вы никогда не определяли это. Мы можем исправить это, добавив if(i === 0) res[j] = [];.

Так с описанной структурой и нашим маленьким исправлением, он должен работать:

var res = []; 

    for(i in this.fields) { 

     for(j in this.fields[i].value) { 

      if(i === 0) res[j] = []; 
      res[j][i] = this.fields[i].value[j]; 

     } 

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