将数组转换成带排序的二维数组?

比如一个普通数组:

[1,3,5,2,7,8,9,0]

我想转换成

[
 [0,0,1],[0,1,3],[0,2,5],
 [1,0,2],[1,1,7],[1,2,8],
 [2,0,9],[2,1,0]
]
阅读 2.3k
4 个回答

就是创建一个矩阵,那么方法很多,具体要看你的需求,比如数组长度不够和超出矩阵怎么办,下面是封装的一个函数

function creatMatrix(arr, list) {
  let result = []
  arr.forEach((item, index) => {
    let res = [item]
    list.reduce((num, column) => {
      res.unshift(num % column)
      return num / column | 0
    }, index)
    result.push(res)
  })
  return result
}

let arr = [1,3,5,2,7,8,9,0]
//生成一个 2 * 2 * 2 的矩阵
creatMatrix(arr, [2, 2, 2])
//[[0,0,0,1],[0,0,1,3],[0,1,0,5],[0,1,1,2],[1,0,0,7],[1,0,1,8],[1,1,0,9],[1,1,1,0]]

//生成一个 3 * 3 的矩阵
creatMatrix(arr, [3, 3])
//[[0,0,1],[0,1,3],[0,2,5],[1,0,2],[1,1,7],[1,2,8],[2,0,9],[2,1,0]]

//生成一个 3 * 4 * 5 的矩阵
creatMatrix(arr, [3, 4, 5])
//[[0,0,0,1],[0,0,1,3],[0,0,2,5],[0,1,0,2],[0,1,1,7],[0,1,2,8],[0,2,0,9],[0,2,1,0]]
var data = [1, 3, 5, 2, 7, 8, 9, 0];
    function arrTrans(num, arr) {
      const newArr = [];
      while (arr.length > 0) {
        newArr.push(arr.splice(0, num));
      }
      return newArr;
    }
    const res = arrTrans(3, data);
    const result = res.map((item, i) => {
      return item.map((r, i1) => [i, i1, r]);
    });
    console.log(result);
let i = 0;
let _i = 0;
let result = arr.map((num, index) => {
    if (index > 0 && index % 3 === 0) i++;
    if (index % 3 === 0) {
        _i = 0;
    } else {
        _i++;
    }
    return [i, _i, num]
})
let arr=[1,3,5,2,7,8,9,0];
function getArr(length,arr){
    let newArr=[];
    let spt=parseInt(arr.length/length)+1;
    for(let i=0;i<spt;i++){
        let num=i;
        newArr.push(arr.splice(0,length));
    }
    let Arr=[];
    newArr.map((item,index)=>{
        item.map((item1,index1)=>{
            Arr.push([index,index1,item1]);
        })
    })
    return Arr
}  
getArr(3,arr)
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题