我有一个一维数组,里面填充了我从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
答案 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 );
我更新了代码。