-1

行を配列の列に変更したかったのです。

[
  [1],
  [1,2],
  [1,2,3],
  [4,2,3],
  [4,5,3],
  [4,5,6]
]

[ [1,1,1,4,4,4], [2,2,2,5,5], [3,3,3,6] ] に

私は試した

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];

        }

    }

これにより、空のセットが得られます。

4

3 に答える 3

3

この関数を作成します。

function transpose(arr) {
        return Object.keys(arr[0]).map(function (c) {
            return arr.map(function (r) {
                return r[c];
            });
        });
    }

その後:

var transposedArray = transpose(originalArray);

于 2014-09-17T10:02:05.237 に答える
1

長さが異なり、未定義の値を無視しているため、あなたが求めているのは少し奇妙に見えますが、それでも達成可能です。

Arrayfor..inにループを使用しないでください。通常の. また、元の子Arraysの長さの最大値である、新しい親Arrayに含まれるアイテムの数を知る必要があります。for

var arrR = [ // will refer to "down" and "across" as in this literal
        [1],
        [1, 2],
        [1, 2, 3],
        [4, 2, 3],
        [4, 5, 3],
        [4, 5, 6]
    ];
function r2c(arr) {
    var arrC = [], // next get the longest sub-array length
        x = Math.max.apply(Math, arr.map(function (e) {return e.length;})),
        y = arr.length,
        i, j;
    for (i = 0; i < x; ++i) {   // this is the loop "down"
        arrC[i] = [];
        for (j = 0; j < y; ++j) // and this is the loop "across"
            if (i in arr[j])
                arrC[i].push(arr[j][i]);
    }
    return arrC;
}
var arrC = r2c(arrR);
/* [
    [1, 1, 1, 4, 4, 4],
    [2, 2, 2, 5, 5],
    [3, 3, 3, 6]
] */

[[1], [1, 2], [1]]になることに満足しているかどうかを検討する必要がありますが[[1, 1, 1], [2]]、これは予想外 ( の位置2が完全に失われている) と考えられますが、意図したとおりのようです。

于 2013-10-11T01:23:49.017 に答える