2013-03-05 2 views
1

У меня есть массив, который был построен из чтения в файле CSV, используя jquery.csv.js так:разваливается данные Javascript массива

$.ajax(
{ 
    type : "GET", 
    url : "data.csv", 
    dataType : "text", 
    success : function(csv) 
    { 
     myData = $.csv.toArrays(csv); 
     for(var i=0; i<3; i++) 
      console.log(myData[i]); 
    } 
}); 

И образец продукции выглядит следующим образом: ["-112.5", "15", "0", "0"] ["-112.5", "10", "0", "0"] ["-112.5", "5", "112.1667", "85.3819"]

I Я пытаюсь построить эти данные с помощью FLOT, поэтому мне нужно, чтобы эти значения были разбиты на координаты x, y, такие как [-112.5, 15], [0, 0], [-112.5, 10], [0, 0], [- 112,5, 5], [112.1667, 85.3819]

У меня есть попытался с помощью вложенных циклов для таких как:

for(var i = 0; i < myData.length; i++) 
{ 
    for(var j = 0; j < 2; j++) 
    { 
     newArray[i][j] = origArray[i][j]; 
    } 
} 

Но это проливает неопределенную ошибку и озираясь переполнением стека, то очевидно, JS не обрабатывает массивы в порядке, я привык.

Может кто-нибудь указать мне в правильном направлении?

+0

@ultranaut - К сожалению, я пытался быть кратким и вместо этого сделали вещи более сложными. Я обновил переменные, чтобы лучше отразить то, что я пытался сделать. myData - результат массива при анализе файла CSV. – Dave

ответ

2

Ошибка в том, что вы не можете установить newArray[i][j] перед определением newArray[i]:

for(var i = 0; i < origArray.length; i++){ 
    newArray[i] = []; // <--- 

    for(var j = 0; j < 2; j++){ 
    newArray[i][j] = origArray[i][j]; 
    } 
} 

Но, вы также можете беспокоиться немного меньше об индексах (по крайней мере те из newArray), принимая slices of each origArray[i] и pushing them to newArray:

for (var i = 0; i < origArray.length; i++) { 
    var innerArray = origArray[i]; 

    for (var j = 0; j < innerArray.length; j += 2) { 
     newArray.push(innerArray.slice(j, j + 2)); 
    } 
} 

http://jsfiddle.net/PxPzt/


В противном случае, вы можете получить показатели, необходимые для желаемого результата со следующим:

for (var i = 0; i < origArray.length; i++){ 
    for (var j = 0; j < origArray[i].length; j++){ 
     var k = i * 2 + Math.floor(j/2); 

     if (newArray[k] == null) 
      newArray[k] = []; 

     newArray[k][j % 2] = origArray[i][j]; 
    } 
} 

http://jsfiddle.net/b3tGL/

+0

Ломтики были определенно для меня. Работает отлично. Спасибо! – Dave

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