[小笔记]TypeScript/JavaScript数组转置
在代数中,矩阵一个是一个方形数组,它由若干个长度相等的子数组构成。所谓转置指的是将一个矩阵中元素的行与列进行互换,就像将将一个矩形沿着对角线翻转一样,如:
[[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 ] ]