我有一个数组是通过使用jquery.csv.js读取csv文件而构建的,如下所示:
$.ajax(
{
type : "GET",
url : "data.csv",
dataType : "text",
success : function(csv)
{
myData = $.csv.toArrays(csv);
for(var i=0; i<3; i++)
console.log(myData[i]);
}
});
输出样本如下:
["-112.5", "15", "0", "0"]
["-112.5", "10", "0", "0"]
["-112.5", "5", "112.1667", "85.3819"]
我正在尝试使用FLOT绘制这些数据,所以我需要将这些值分解为x,y坐标,如[-112.5,15],[0,0],[ - 112.5,10], [0,0],[ - 112.5,5],[112.1667,85.3819]
我尝试过使用嵌套for循环,如:
for(var i = 0; i < myData.length; i++)
{
for(var j = 0; j < 2; j++)
{
newArray[i][j] = origArray[i][j];
}
}
但是这会抛出一个Undefined错误并查看堆栈溢出,很明显JS不会像我习惯的那样处理数组。
有人请指出我正确的方向吗?
答案 0 :(得分:2)
错误是因为在定义newArray[i][j]
之前无法设置newArray[i]
:
for(var i = 0; i < origArray.length; i++){
newArray[i] = []; // <---
for(var j = 0; j < 2; j++){
newArray[i][j] = origArray[i][j];
}
}
但是,通过slices of each origArray[i]
和pushing them to newArray
,您还可以更少关注索引(至少是newArray
的索引):
for (var i = 0; i < origArray.length; i++) {
var innerArray = origArray[i];
for (var j = 0; j < innerArray.length; j += 2) {
newArray.push(innerArray.slice(j, j + 2));
}
}
否则,您可以使用以下内容获取所需结果所需的索引:
for (var i = 0; i < origArray.length; i++){
for (var j = 0; j < origArray[i].length; j++){
var k = i * 2 + Math.floor(j / 2);
if (newArray[k] == null)
newArray[k] = [];
newArray[k][j % 2] = origArray[i][j];
}
}