我有一个通过使用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];
}
}
但这会引发未定义的错误,并四处查看堆栈溢出,显然JS不能像我以前那样处理数组。
有人能指出我正确的方向吗?
最佳答案
该错误是因为在定义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
newArray
和pushing them to origArray[i]
来减少对索引(至少是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));
}
}
http://jsfiddle.net/PxPzt/
否则,您可以使用以下方法获得所需结果的索引:
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];
}
}
http://jsfiddle.net/b3tGL/
关于javascript - 分解Javascript数组数据,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15214180/