例如,我想移动数组的 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/