2013-09-13 3 views
0

У меня есть одномерный массив заполняется с графической точкой координат, которые я получаю от закодированной строки JSON, на котором яJavascript одномерных для многомерного массива

jsdata = $.parseJSON('[' + strdata + ']'); 

arr = jsdata[0].toString().split(','); 

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

data['parameter to plot'][point][coordinate] 

в качестве примера, предположим, что я собираюсь сделать линейный график с данными от 2-х параметров. Это привлечет 74 пункта 2 координаты для каждого из 2-х линий, что означает индекс массива будет идти так далеко, как:

arr[296]; 

Таким образом, индексы в «данные» массива нужно будет идти так далеко, как:

data[1][74][1]; 

У меня нет проблем с созданием каких-либо массивов, но разработка алгоритма заполнения массива «данных» в соответствии с длиной «arr» действительно выпекает мой мозг. :/

Спасибо за помощь.

EDIT:

Поскольку я не знаю, сколько параметров мне нужно рисовать графики для но я буду знать, какой тип графика я буду использовать, я пришел с этим ответом ,

создать мульти двумерный массив с помощью этой функции

function createArray(length) { 
    var arr = new Array(length || 0), 
     i = length; 

    if (arguments.length > 1) { 
    var args = Array.prototype.slice.call(arguments, 1); 
    while(i--) arr[i] = createArray.apply(this, args); 
    }   
    return arr; 
} 

И тогда я могу сделать

function toMulti(arr, plotType) 
{ 

    if(plotType =='line_plot') 
    { 
     var lineaux = createArray((arr.length/74/2),arr.length/2,2); 
     var cont = 0; 
     for(i= 0; i<lineaux.length; i++) 
      for(j=0; j< lineaux[i].length; j++) 
       for(k=0; k< lineaux[i][j].length;k++) 
       { 
        lineaux[i][j][k] = arr[cont]; 
        cont +=1; 
       } 
     return lineaux; 
    } 
} 

Но линейный график не всегда будет иметь 74 очков, и не будет я всегда сюжет линейный график ..

Скажите мне, что вы думаете об этом, и если вы можете придумать какой-либо способ сделать этот не-plotType зависимым, я буду вечно благодарен. Или просто купите себе пиво, чтобы это сделать. : D

+0

Какова структура исходного массива? – pawel

+0

Это не так. это что-то вроде arr [0] = 'x координат', arr [1] = 'y координат' и т. д. – nanominimicro

+0

Как «* так далее *»? 'arr [2] = 'z coord'', или' arr [2] =' second x coord'', или что это такое? Покажите нам образец, может быть, 'JSON.stringify (arr, null, 4)' – Bergi

ответ

2

Вам необходимо иметь два vars, parameterCount и pointCount.
Тогда размер вашего массива данных составляет 2 * parameterCount * PointCount (в 2d).

function toMulti(data, parameterCount) { 
    var pointCount = data.length/(2 * parameterCount); 
    var res = []; 
    for (var pr=0 ; pr<parameterCount ; pr ++) { 
     var newLine = []; 
     for (var pt=0; pt<pointCount; pt++) { 
       var newPoint = [data[2*pr*pointCount+2*pt],data[2*pr*pointCount+2*pt+1]] 
       newLine.push(newPoint); 
     } 
     res.push(newLine); 
    } 
    return res; 
} 

Просто объяснить немного:
parameterCount является счетчиком ... параметр, и это первый аспект многокомпонентного dimensionnal массива.
pointCount - это второе измерение
Третье измерение - это 2D, x и y точки.

Точки должны быть организованы таким образом в пределах массива:
[param1x1, param1y1, param1x2, param1y2, param1x3, param1y3, ... param1xpointCount, param1ypointCount, param2x1, param2y1, param2x2, param2y2, param2x3,. ..., param2xpointCount, param2ypointCount, ..., paramparameterCountx1, paramparameterCounty1, ... paramparameterCountxpointCount, paramparameterCountypointCount]

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

Edit: при условии, что это 2D множество точек, и вы знаете, количество параметров, то есть

var pointCount = data.length/(2 * parameterCount); 

я обновил код.

+0

Я не буду знать, сколько параметров я собираю для построения данных. Мне нужно получить это из индекса arr []. – nanominimicro

+0

newPoint ou thisPoint? – nanominimicro

+0

OOps! исправленный. – GameAlchemist

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