Javascript 将矩阵转换为列式新平面阵列
我使用的是一个数组数组,每个内部数组都包含对象 我想把这个数组重新组织成一个平面数组,其顺序是按列排列的(见下文) 目前我写了以下内容:Javascript 将矩阵转换为列式新平面阵列,javascript,arrays,javascript-objects,Javascript,Arrays,Javascript Objects,我使用的是一个数组数组,每个内部数组都包含对象 我想把这个数组重新组织成一个平面数组,其顺序是按列排列的(见下文) 目前我写了以下内容: const newArray = []; arr.map((rows, i) => { rows.map((row) => { newArray.splice(i, 0, row); }); }); 但在操作过程中,订单开始出错 (注意,我在节点内部使用Promise库,因此将贴图视为法线贴图) 电流阵列 期望数组 第
const newArray = [];
arr.map((rows, i) => {
rows.map((row) => {
newArray.splice(i, 0, row);
});
});
但在操作过程中,订单开始出错
(注意,我在节点内部使用Promise库,因此将贴图视为法线贴图)
电流阵列
期望数组
第一步:将对象数组合并到对象数组:
var merged = [].concat.apply([], arr);
第二步:按Mapped\u索引对对象进行排序
function compare( a, b ) {
if ( a.Mapped_Index < b.Mapped_Index ){
return -1;
}
if ( a.Mapped_Index > b.Mapped_Index ){
return 1;
}
return 0;
}
merged.sort(compare);
功能比较(a、b){
if(a.映射索引b.映射索引){
返回1;
}
返回0;
}
合并。排序(比较);
第三步是按字段名排序,这有点棘手。看起来您想转置原始矩阵,然后将其展平:
let result = arr[0].flatMap((_, i) => arr.map(row => row[i]));
在这里使用承诺有什么意义?这只是一个较大代码库的一小部分,忽略映射@georgthanks@trincotThank你,我没有经常使用flatMap()
,所以这很好
function compare( a, b ) {
if ( a.Mapped_Index < b.Mapped_Index ){
return -1;
}
if ( a.Mapped_Index > b.Mapped_Index ){
return 1;
}
return 0;
}
merged.sort(compare);
let result = arr[0].flatMap((_, i) => arr.map(row => row[i]));