这不就是一个二重循环的事儿吗?

var arr = [

["num1", "num2", "num3", "num4"],

["1", "2", "3", "4"],

["1", "2", "3", "4"],

["1", "2", "3", "4"],

["1", "2", "3", "4"]

];

var keys = arr.shift();

const result = keys.reduce((obj, key, i) => {

obj[key] = arr.map(a => a[i]);

return obj;

}, {});

console.log(result);

10月16日补充说明:

前提是,大数据中每个小数组的长度是一样的(如果不一样需要做容错处理),然后把这个长度取出来作为大循环的长度。之所以这样做,是因为把结果和源数据都看作矩阵的话,它们之间是个转置的关系。

接下来,大循环只能从 1 开始,而不能从 0 开始,因为第 0 项是 key,后面的各项组合起来才是 value。这就是上面把 keys 单独取出来的原因(按正常逻辑是转置后取,对这个问题来说,转置前取更方便,而后取了之后,后面的部分就可以从 0 开始索引了)

剩下的事情就简单了,用个循环把 value 拼出来就好。

上面的代码采用了 reduce 和 map,整个过程实际是把转置和处理混在一起的。建议你自己思考一下如何按逻辑一步步来处理,不考虑优化整合的问题,用一个二重循环把它实现出来(也就是这段说明提到的思路),然后自己给自己回答个。

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐