javascript - 如何移动 3D 数组的 1 个元素

标签 javascript arrays multidimensional-array

例如,我想移动数组的 1 个元素:

一维数组:

const arr_1d=["a","b","c","d"];
arr_1d.push(arr_1d.shift())
document.write(JSON.stringify(arr_1d)); //["b","c","d","a"]

二维数组:

const arr_2d=[["a","b"],["c","d"]];
for(let i=0;i<arr_2d.length;i++){
  arr_2d[i==0?arr_2d.length-1:i-1].push(arr_2d[i].shift());
}
document.write(JSON.stringify(arr_2d)); //[["b","c"],["d","a"]]

如何使用 3D 数组做到这一点

// (eg:
  [[["a","b"],[["c","d"]],[["e","f"],[["g","h"]]] 
// to 
  [[["b","c"],[["d","e"]],[["f","g"],[["h","a"]]]  
//)

我尝试过:

const arr_3d=[[["a","b"],["c","d"]],[["e","f"],["g","h"]]];
for(let i=0;i<arr_3d.length;i++){
  for(let j=0;j<arr_3d[i].length;j++){
      arr_3d[i][j==0?arr_3d.length-1:j-1].push(arr_3d[i][j].shift());
  }
}
document.write(JSON.stringify(arr_3d)); //[[["b","c"],["d","a"]],[["f","g"],["h","e"]]]

输出为

[[["b","c"],["d","a"]],[["f","g"],["h","e"]]]

而不是

[[["b","c"],[["d","e"]],[["f","g"],[["h","a"]]]

,这不起作用。

最佳答案

应该执行以下操作:

const arr_3d=
[
 [
  ["a","b"],
  ["c","d"]
 ],
 [
  ["e","f"],
  ["g","h"]
 ]
];
const one=arr_3d.flat(2); // flatten
one.push(one.shift()); // rotate values
const three=arr_3d.forEach(a3=>
 a3.forEach(a2=>
  a2.forEach((_,i,a)=>
   a[i]=one.shift()))); // feed back

document.write(JSON.stringify(arr_3d));

我只是将整个数组展平为一个新的一维数组one,“旋转”一次其中的值,然后将元素反馈回已经存在的数组arr_3d ,替换那里的原始值。

关于javascript - 如何移动 3D 数组的 1 个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73781194/

相关文章:

java - 基于 3 列对多维数组进行排序

ruby - 如何仅将一个值的累加和添加到数组?

javascript - 格式化数字,如 22,55,86,21,28

javascript - 使用 lodash 按键对数组中的对象进行排序

java - 一定大小的数组的HashMap

c - 如何获得指针指向的二维数组的宽度/高度?

c++ - 打印多维数组时输出错误

javascript - 在 React 模块中测试 SweetAlert2 的 preConfirm Hook

JavaScript 保留字 : "preset"

javascript - 使用 jQuery 对元素进行排序、删除和附加元素在 IE 中不起作用