你所问的看起来有点奇怪,因为你有不同的长度并且你忽略了未定义的值,但它仍然是可以实现的。
不要对Arrayfor..in
使用循环,使用普通的. 此外,您需要知道新的父Array中有多少项目,这是原始子Arrays长度的最大值。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
完全失去了的位置),但似乎是您想要的。