Javascript一维到多维数组

标签 javascript arrays multidimensional-array

我有一个一维数组,其中填充了从 JSON 编码字符串获取的图形点坐标,在该数组上我

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

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

而且我似乎不太想出将其解析为 3 维数组的算法,它需要具有以下结构:

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

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

arr[296];

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

 data[1][74][1];

我创建任何数组都没有问题,但是开发一种根据“arr”长度填充“data”数组的算法确实让我很烦恼。 :/

感谢兄弟的帮助。

编辑:

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

我使用此函数创建一个多维数组

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

最佳答案

您需要有两个变量,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 是第二个维度
第三个维度是二维,即点的 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 );

我更新了代码。

关于Javascript一维到多维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18784884/

相关文章:

c++ - memset() 在 C++ 中的工作原理

javascript - 如何创建全局 javascript 命名空间的实例?

javascript - 从 WebRTC 访问 RTP 时间戳

javascript - 逻辑错误! in 使用字符串在指定位置插入数组

javascript - 如何使用 ng-repeat 迭代存储在对象中的数组

python - 如何从 numpy ndarray 创建 numpy ndarray?

javascript - javascript 中的 setTimeOut() 函数是什么?

javascript - 在谷歌地图标记中显示 JSON 数据

javascript - 除数字外,如何按字母顺序对对象数组进行排序?

php - 如何找到潮汐数据的所有波峰和波谷?