用javascript将列转换为行

Convert columns to rows in javascript

本文关键字:转换 javascript      更新时间:2023-09-26

我在javascript中读过矩阵的行与列交换(换位)。然而,它对我不起作用(因为我仍然很愚蠢)。

有许多阵列,每个阵列都像这样单独排列:

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:无法将未定义转换为对象"

在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

源代码中有一些错误。我们不知道你的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];
        }
    }

确保循环本身存在一个错误。在第一次迭代中存在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];
    }
}