0

我有一个多维数组 (retdata[R][C]),它基本上看起来像一个单元格电子表格。R代表行,C代表列。我想创建一个对象数组,以便获得以下内容

 [{retdata[1][1]:retdata[2][1],retdata[1][2]:retdata[2][2],retdata[1][3]:retdata[2][3]    }, 
  {retdata[1][1]:retdata[3][1],retdata[1][2]:retdata[3][2],retdata[1][3]:retdata[3][3]    },
  {retdata[1][1]:retdata[4][1],retdata[1][2]:retdata[4][2],retdata[1][3]:retdata[4][3]    }, 
 etc...
]

结果数组应为:

 [{"Col1":"dataR2C1","Col2":"dataR2C2", "Col3":"dataR2C3"}, 
 {"Col1":"dataR3C1","Col2":"dataR3C2", "Col3":"dataR3C3"}, 
 {"Col1":"dataR4C1","Col2":"dataR4C2", "Col3":"dataR4C3"}, 
 etc...
]

我尝试了多种选择,但均未成功。任何帮助将不胜感激。

这是我使用的一个示例,但它没有正确序列化对象。

                var TABLE = [];
                for (var i=2; i<=rows; i++) {
                    var ROW = {};                       
                    for (var j=1; j<=columns; j++){
                        name = retdata[1][j].toString;
                        value = retdata[i][j].toString;
                        ROW += {name: value}
                    }

                TABLE += ROW;   

                }
4

2 回答 2

1

这就像一个 CSV 解析器,表的第一行是行对象的键。你的函数可以工作,但你需要更正你的数组索引:它们总是从 开始0,一直运行到n-1. 此外,您需要学习一点 JavaScript 语法:

  • 某些东西.toString不会对该值调用 toString 函数,而是获取该函数(它只是一个对象)。
  • 您根本不需要 toString - 在需要的地方,值会自动转换
  • 您不能使用简单的运算符将键值对添加到对象。您需要使用括号表示法将值分配给对象的该属性。+=操作员会将值转换为字符串并将它们连接起来。
  • 数组也是一样。您可以使用该.push()方法,或者仅分配给数字键 - javascript 数组对象将自动更新其长度。
var retdata = […];

var table = [],
    keys = retdata.shift(); // get & remove the first row
for (var i=0; i<retdata.length; i++) {
    var row = {};
    for (var j=0; j<retdata[i].length; j++)
        row[ keys[j] ] = retdata[i][j];
    table[i] = row;
}
于 2012-09-13T17:46:05.407 回答
-1

谢谢伯吉。这是我的最终解决方案:

              var TABLE = [];
                for (var i=2; i<=rows; i++) {
                    var ROW = {};                       
                    for (var j=1; j<=columns; j++){
                        ROW [retdata[1][j]] = retdata[i][j];
                    }
                TABLE[i]= ROW;  
                }

哪个有效。转变没有按预期工作,但上面的代码正是我所需要的。谢谢!

于 2012-09-13T18:00:30.250 回答