Javascript 从普通阵列到多维阵列

Javascript 从普通阵列到多维阵列,javascript,multidimensional-array,Javascript,Multidimensional Array,我知道类似的问题已经有了答案,但结果不是我想要的 我想将[0,1,2,3,4,5,6,7,8]插入到多维数组中,如: [0,3,6],[1,4,7],[2,5,8] 而不是: [0,1,2],[3,4,5],[6,7,8] 除了使用for…loop之外,还有其他更简单的方法吗?您可以试试这个。我使用“Array.reduce”和“Object.values”来实现这一点 var arr=[0,1,2,3,4,5,6,7,8] 变量toMatrix=(arr,宽度)=>{ 让间隙=数学单元(ar

我知道类似的问题已经有了答案,但结果不是我想要的

我想将[0,1,2,3,4,5,6,7,8]插入到多维数组中,如:

[0,3,6],[1,4,7],[2,5,8]

而不是:

[0,1,2],[3,4,5],[6,7,8]


除了使用for…loop之外,还有其他更简单的方法吗?

您可以试试这个。我使用“Array.reduce”和“Object.values”来实现这一点

var arr=[0,1,2,3,4,5,6,7,8]
变量toMatrix=(arr,宽度)=>{
让间隙=数学单元(arr.length/width)
返回Object.values(arr.reduce((o,d,i)=>(o[i%gap]=(o[i%gap]| |[])。concat(d,o),{}))
}
控制台日志(toMatrix(arr,3))

log(toMatrix(arr,2))
您可以使用ttha实际索引获取余数,并将值推送到结果集

const
toMatrix=(数组,宽度)=>array.reduce((r,v,i)=>{
(r[i%宽度]=r[i%宽度]| |[])。推(v);
返回r;
}, []),
format=array=>array.map(a=>a.join(“”));
log(格式为toMatrix([0,1,2,3,4,5,6,7,8,2));
log(格式为toMatrix([0,1,2,3,4,5,6,7,8,3));
log(格式为toMatrix([0,1,2,3,4,5,6,7,8,4))
.as控制台包装{最大高度:100%!重要;顶部:0;}
input=[0,1,2,3,4,5,6,7,8]
函数分割组(数组、组计数){
返回输入。减少((会计科目、当前、索引)=>{
让组=索引%groupCount;
如果(!acc[group])acc[group]=[];
acc[组].推送(当前);
返回acc
},[])
}
日志(“3组”,划分组(输入,3));
日志(“2组”,划分组(输入,2));
日志(“1组”,划分组(输入,1));

日志(“5组”,划分组(输入,5))尽管已经发布了许多解决方案,但无论如何,我将发布我的解决方案,因为我认为它可读、可行,并且符合OP的用例

const toMatrix = (arr, width) => arr.reduce((rows, key, index) => {
    let chunkLength = Math.ceil(arr.length / width);
    let rowIndex = Math.ceil(index % chunkLength);
    rows[rowIndex] ? rows[rowIndex].push(key) : rows.push([key]);
    return rows;
}, []);
const arr=[0,1,2,3,4,5,6,7,8]
常量toMatrix=(arr,width)=>arr.reduce((行,键,索引)=>{
设chunkLength=Math.ceil(arr.length/width);
让rowIndex=Math.ceil(索引%chunkLength);
行[rowIndex]?行[rowIndex]。推送(键):行。推送([key]);
返回行;
}, []);
控制台日志(toMatrix(arr,3));
控制台日志(toMatrix(arr,2));
控制台日志(toMatrix(arr,1));
控制台日志(toMatrix(arr,4));

控制台日志(toMatrix(arr,5))如果您愿意,也可以尝试以下代码

函数拆分阵列(阵列,宽度=1){
/**
*参数:-
*arr:数字数组(本例中为整数)
*宽度:每个子数组中的元素数
*/
设newArr=[];
let times=arr.长度/宽度;
for(设i=0;i*/
Done@vibhor1997a先生!!我想说的是命名和可读性,而不是格式化。请删除sir:)请为其他
宽度添加一些示例。
const toMatrix = (arr, width) => arr.reduce((rows, key, index) => {
    let chunkLength = Math.ceil(arr.length / width);
    let rowIndex = Math.ceil(index % chunkLength);
    rows[rowIndex] ? rows[rowIndex].push(key) : rows.push([key]);
    return rows;
}, []);