首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Javascript中转置存储为一维数组的二维方阵

如何在Javascript中转置存储为一维数组的二维方阵
EN

Stack Overflow用户
提问于 2018-08-13 14:52:37
回答 4查看 616关注 0票数 5

我的问题与这个问题密切相关,但我正在寻找Javascript中的解决方案

How to Transpose 2D Matrix Stored as C 1D Array

基本上我有一个2D方阵

代码语言:javascript
复制
1 2 3
4 5 6
7 8 9

存储方式如下

代码语言:javascript
复制
let anArray = [1 ,2, 3, 4, 5, 6, 7, 8, 9]

我如何转置这个矩阵,以使我的源数组的元素按如下所示进行切换?

代码语言:javascript
复制
let newArray = [1, 4, 7, 2, 5, 8, 3, 6, 9] 
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2018-08-13 15:02:29

您可以获取数组维度的长度,并将项映射到新数组的特定索引上。

代码语言:javascript
复制
var array = [1 ,2, 3, 4, 5, 6, 7, 8, 9],
    n = Math.sqrt(array.length),
    transposed = array.map((_, i, a) => a[(i % n) * n + Math.floor(i / n)]);
    
console.log(transposed.join(' '));

票数 4
EN

Stack Overflow用户

发布于 2018-08-13 15:02:48

您链接到的答案中的方法在JavaScript中也可以很好地工作。

对于3 x 3:

代码语言:javascript
复制
const anArray = [1, 2, 3, 4, 5, 6, 7, 8, 9];

let newArray = [];
for (let i = 0; i < 3; i++) {
  for (let j = 0; j < 3; j++) {
    newArray[3 * i + j] = anArray[3 * j + i];
  }
}

console.log(newArray);

对于N x N,只需将3替换为N即可。

这个答案避免了除法和求底(整数除法),一个好的优化器应该会让代码相对更快。您还可以考虑使用以下命令初始化新数组

代码语言:javascript
复制
let newArray = new Array(9);

或者

代码语言:javascript
复制
let newArray = new Array(N * N);

但是在尝试这样的“优化”之前分析代码。

票数 2
EN

Stack Overflow用户

发布于 2018-08-13 15:07:15

代码语言:javascript
复制
var arr1 = [];
var arr2 = [];



for(int i=0; i<mat.length; i++) {
    for(int j=0; j<mat[i].length; j++) {
        arr1.push(mat[i][j]);
    }
}

for(int j=0; j<mat[i].length; j++) {
    for(int i=0; i<mat.length; i++) {
        arr2.push(mat[i][j]);
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51816633

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档