主要思路,将原二维数组映射为新的键值对数组(键为下标,值为数据),并拆分为一维数组。
再讲一维数组根据相同的key组合为不同的一维数组,再将其整合为二维数组。
下面代码可复制直接尝试
var arr1 = [[1,2,3],[4,5,6],[7,8]];
arr1.map(function (item, index) {
item.map(function (childItem, childItemIndex) {
item[childItemIndex] = {"key": childItemIndex, "value": childItem}
})
return item
})
var arr2 = arr1.reduce(function (a, b) { return a.concat(b)} );
var arr3 = groupBy(arr2, "key")
/*
* 按照某个key,将以为数组分组为二维数组
*/
function groupBy( array , id ) {
let groups = {};
array.forEach( function( o ) {
let group = JSON.stringify( o[id] );
groups[group] = groups[group] || [];
groups[group].push( o["value"]);
});
return Object.values(groups);
}