我有一个一维数组,其中填充了从 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/