当前位置 博文首页 > jcLee95的博客:[小笔记]TypeScript/JavaScript数组转置

    jcLee95的博客:[小笔记]TypeScript/JavaScript数组转置

    作者:[db:作者] 时间:2021-09-18 15:47

    [小笔记]TypeScript/JavaScript数组转置

    CSDN:jcLee95

    邮箱:291148484@163.com

    在代数中,矩阵一个是一个方形数组,它由若干个长度相等的子数组构成。所谓转置指的是将一个矩阵中元素的行与列进行互换,就像将将一个矩形沿着对角线翻转一样,如:

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

    翻转后:

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

    TypeScript

    // 转置一个矩阵型数组
    export const T = (ary: any[])=>{
      /*
       * 转置一个二维矩阵的本质就是改变其子数组的结构,
       * 即将原矩阵的行与列在结构上进行互换:
       *  - 新子数组的个数为原任意一个子数组的长度;
       *  - 新任意一个子数组的元素皆依次取自于原每一个子数组。
       * 需要一个二层循环:
       *  - 内层循环构造一个子数组,即从原子数组逐个取出同位序元素;
       *  - 外层循环收集所有子数组。
       */
      let ar = []     // 转置后的数组
      for(let i=0; i<ary[0].length; i++){
        let cd = []   // 某个新子数组
        for(let j=0;j<ary.length;j++){
          cd.push(ary[j][i])
        }
        ar.push(cd)
      }
      return ar
    }
    

    JavaScript

    // 转置一个矩阵型数组
    var T = function (ary) {
        /*
         * 转置一个二维矩阵的本质就是改变其子数组的结构,
         * 即将原矩阵的行与列在结构上进行互换:
         *  - 新子数组的个数为原任意一个子数组的长度;
         *  - 新任意一个子数组的元素皆依次取自于原每一个子数组。
         * 需要一个二层循环:
         *  - 内层循环构造一个子数组,即从原子数组逐个取出同位序元素;
         *  - 外层循环收集所有子数组。
         */
        var ar = []; // 转置后的数组
        for (var i = 0; i < ary[0].length; i++) {
            var cd = []; // 某个新子数组
            for (var j = 0; j < ary.length; j++) {
                cd.push(ary[j][i]);
            }
            ar.push(cd);
        }
        return ar;
    };
    

    用例

    console.log(T(
      [
        [1,'2',3],
        [4,5,6],
        [7,['8'],9]
      ]
    ));
    

    Out[]:

    [ [ 1, 4, 7 ], [ '2', 5, [ '8' ] ], [ 3, 6, 9 ] ]
    
    cs