JS如何竖着遍历一维数组

一维数组有 12 个元素,三个换行,输出如下


现在想竖着输出,就变成 4 个换行,输出如下

可以看成一个二维数组,本质上是坐标互换了,以第一行元素举例

[[0,0][0,1],[0,2]] 变成 [[0,0],[1,0],[2,0]]

实现如下,也就是 rows x columns 的二维数组变成 columns x rows 的二维数组,因为输入输出都是一维,先把原数组索引转换成 x 和 y,在通过 x 和 y 计算目标数组的索引即可


    let rows = 3;
      columns = 4;

      let nums = [];
      for (let i = 0; i < rows * columns; i++) {
        nums.push(i);
      }

      inputTable(nums, rows, columns);
      convertArr(nums, rows, columns);

      function convertArr(sourceArr, rows, columns) {
        let targetArr = [];
        sourceArr.forEach((item, index) => {
          let x = (index / rows) | 0;
          y = index % rows;

          targetArr[y * columns + x] = item;
        });

        inputTable(targetArr, columns, rows);
      }

      function inputTable(arr, rows, columns) {
        let tableArr = [];
        Array(columns)
          .fill(1)
          .forEach(() => tableArr.push([]));
        arr.forEach((item, index) => {
          const pos = (index / rows) | 0;
          tableArr[pos].push(item);
        });
        console.table(tableArr);
      }

convertArr采用创建一个新数组,其实也可以在原数组上置换,不用遍历所有元素,倒数第二行的最后一个元素置换完就可以停止了。

实现[x,y]转换为[y,x]

       sourceArr.forEach((item, index) => {
          let x = (index / rows) | 0;
          y = index % rows;

          targetArr[y * columns + x] = item;
        });

inputTable 用来将一维数组输出为指定行和列的表格

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容