我有这个嵌套数组。
var arr = [
[{ a }, { b }, { c }, { d }],
[{ a }, { b }],
[{ a }, { b }, { c }],
[{ a }]
];
我需要像这样
var arr = [
[{ a }, { a }, { a }, { a }],
[{ b }, { b }, { b }],
[{ c }, { c }],
[{ d }]
];
这是我到目前为止(不是很远)去的地方:
(function() {
var arr = [
[{ a:"a" }, { b:"b" }, { c:"c" }, { d:"d" }],
[{ a:"a" }, { b:"b" }],
[{ a:"a" }, { b:"b" }, { c:"c" }],
[{ a:"a" }]
];
for (i = 0, j = 0; i < arr.length; i++) {
var childArray2 = arr[i];
console.log("i: " + i + ", j: " + j);
}
})();
我已经抽动了头脑,被困住了,非常感谢您的帮助!
答案 0 :(得分:0)
我不确定您的结构100%,因为您显示的结构无效,因此我对其进行了一些修改。但是,这里有一种使用reduce()的方法,该方法使用以下假设:相等的对象位于嵌套数组的相同索引上
var arr = [
[{a: "a"}, {b: "b"}, {c: "c"}, {d: "d"}],
[{a: "a"}, {b: "b"}],
[{a: "a"}, {b: "b"}, {c: "c"}],
[{a: "a"}]
];
let res = arr.reduce((res, curr) =>
{
curr.forEach((v, i) => res[i] = res[i] ? [...res[i], v] : [v]);
return res;
}, []);
console.log(res);
下一个版本是仅使用for
循环的替代版本:
var arr = [
[{a: "a"}, {b: "b"}, {c: "c"}, {d: "d"}],
[{a: "a"}, {b: "b"}],
[{a: "a"}, {b: "b"}, {c: "c"}],
[{a: "a"}]
];
var newArr = [];
for (var i = 0; i < arr.length; i++)
{
for (var j = 0; j < arr[i].length; j++)
{
if (!newArr[j])
{
newArr[j] = [];
newArr[j].push(arr[i][j]);
}
else
{
newArr[j].push(arr[i][j]);
}
}
}
console.log(newArr);
答案 1 :(得分:-1)
怎么样?
let a,b,c,d;
var arr = [
[{ a }, { b }, { c }, { d }],
[{ a }, { b }],
[{ a }, { b }, { c }],
[{ a }]
];
let pivotArr = arr => arr[0].map((x,i) => arr.map(x => x[i]));
pivotArr(arr);