Javascript一维到多维数组

时间:2013-09-13 11:10:08

标签: javascript arrays multidimensional-array

我有一个一维数组,里面填充了我从JSON编码的字符串中得到的图形点坐标,我

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

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

我似乎并没有想到将算法解析为三维数组,需要具有以下结构:

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

举个例子,假设我要绘制一个包含2个参数数据的折线图。它将绘制74个点,每个2行有2个坐标,这意味着数组的索引将达到:

arr[296];

因此,“数据”数组的索引需要达到:

 data[1][74][1];

我创建任何数组都没有问题,但是根据“arr”长度开发一个填充“数据”数组的算法真的让我的大脑充满了热情。 :/

感谢任何帮助兄弟。

编辑:

因为我不知道我需要绘制多少参数来绘制图形,但我知道我将使用哪种类型的图形,我想出了这个答案。

我使用此函数

创建一个多维数组
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

1 个答案:

答案 0 :(得分: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是...参数计数,是多维数组的第一个维度 pointCount是第二个维度
第三个维度是2D,点的x和y。

这些点应该在数组中这样组织:
[param1x1,param1y1,param1x2,param1y2,param1x3,param1y3,... param1xpointCount,param1ypointCount,param2x1,param2y1,param2x2,param2y2,param2x3,....,param2xpointCount,param2ypointCount, ...,paramparameterCountx1,paramparameterCounty1,... paramparameterCountxpointCount,paramparameterCountypointCount]

(抱歉,我不能在这里使用数学符号,这会使所有这些看起来不那么混乱。)

编辑:如果它是一组2D点,你知道参数计数,你有

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

我更新了代码。