从一个二维数组推送到另一个二维数组。

4

我有一个像这样的数组:

arr1 [
  [
    '    ', '[H] ',
    '    '
  ],
  [
    '[W] ', '[B] ',
    '    '
  ],
  [
    '[S] ', '    ',
    '[M]'
  ]
]

如何将arr1中每个数组的第0个索引元素推入arr2 [0],将arr1中每个数组的第1个索引元素推入arr2 [1]等等,就像这样:

arr2 [
  [
    '    ', '[W] ',
    '[S] '
  ],
  [
    '[H] ', '[B] ',
    '    '
  ],
  [
    '    ', '    ',
    '[M]'
  ]
]

这个方法

let arr2 = []
 for (let i = 0; i< arr1.length; i++) {
   for (let j of arr1[i]) {
     arr2[i].push(j[i])
     //or arr2[i].push(j)
   }
 }

抛出错误

arr2[i].push(j[i]) //or arr2[i].push(j) the same error
       ^
TypeError: Cannot read properties of undefined (reading 'push')

1
在访问/推送插槽之前,您必须初始化该插槽。在推送操作之前尝试添加以下内容“if(!arr2 [i])arr2 [i] = []” - Ajex
2个回答

2

假定您将arr2作为空数组开始,因此您需要初始化每个子数组。

const arr1 = [
  ['    ', '[H] ', '    '],
  ['[W] ', '[B] ', '    '],
  ['[S] ', '    ', '[M]'],
];

const arr2 = [];

for (let i = 0; i < arr1.length; i++) {
  for (const arr of arr1) {
    if (!arr2[i]) arr2[i] = [];
    arr2[i].push(arr[i]);
  }
}

console.log(arr2);


1

抱歉回复晚了,我不小心将我的答案发布在错误的问题上。

为了更好地理解,您应该像这样编写数组:

let arr1 = [
  ["    ", "[H] ", "    "],
  ["[W] ", "[B] ", "    "],
  ["[S] ", "    ", "[M]"]
];

现在你可以看到这是一个矩阵,你需要对角线反转。
let arr2 = [];
for (let i = 0; i < arr1.length; i++) {
  let elements = arr1[i];
  for (let j = 0; j < elements.length; j++) {
    let element = elements[j];
    arr2[j] = arr2[j] ?? []; //Set to empty array to prevent error
    arr2[j][i] = element;
  }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接