我已经读过这个Swap rows with columns (transposition) of a matrix in javascript但是,它对我不起作用(因为我还是stupi)。
有许多数组作为单独的列,如:
id [1, 2, 3]
caption [one, two, three]
title [One, Two, Three]
我想将列转换为行:
arr= [1, one, One]
...
一些代码
var res = [];
for(i in this.fields) {
for(j in this.fields[i].value) {
res[j][i] = this.fields[i].value[j];
}
}
它给我“TypeError:无法将undefined转换为object”
在php中,这种方法运行正常,但有人可能会指出我如何在js中执行此操作。提前谢谢。
更新简化
var arr = [];
arr[0] = [];
arr[6][0] = 5;
/*
Exception: can't convert undefined to object
@Scratchpad/1:4
*/
当我们扫描普通字符串时,我们使用0-0,0-1,0-2之类的索引进行迭代,直到再次以1-0开始时依次行结束,依此类推。但是在这里我需要0-0,1-0,2-0结束,再次1-0,1-1,1-1 ......
更新“this”。只需添加一些行:
console.log(this.fields[i].value[j]);
console.log('indexes: i='+i, 'j='+j);
你可以看到没有未定义的值
4
indexes: i=0 j=0
1
indexes: i=1 j=0
1
indexes: i=2 j=0
one
indexes: i=3 j=0
One
indexes: i=4 j=0
答案 0 :(得分:1)
您的源代码中存在一些错误。我们不知道您的this.fields
值是怎样的,但是为了您的代码段,请让它看起来像这样:
this.fields = [
{ value: [1, 2, 3] },
{ value: [4, 5, 6] },
{ value: [7, 8, 9] }
]
如果您的this.fields
变量看起来像这样,那么您离解决方案的距离就不远了。您的错误消息显示TypeError: can't convert undefined to object
,因此我猜测您的变量看起来不像描述。
当我们以类似于我的示例的形式转换您的数据时,您的代码片段中的解决方案并不是那么遥远。问题是res
不知道,它的第二个维度应该由数组组成,因为你从未定义过它。我们可以通过添加if(i === 0) res[j] = [];
来解决此问题。
因此,通过所描述的结构和我们的小修复,它应该可以工作:
var res = [];
for(i in this.fields) {
for(j in this.fields[i].value) {
if(i === 0) res[j] = [];
res[j][i] = this.fields[i].value[j];
}
}
答案 1 :(得分:0)
确定一个错误在循环内部。在第一次迭代res[j]
存在,但内部循环res[j][i]
内部未定义,将引发错误。您可以通过检查元素是否已存在来修复它:
var res = [];
for(i in this.fields) {
for(j in this.fields[i].value) {
if( !res[j] ) { res[j] = []; }
res[j][i] = this.fields[i].value[j];
}
}