交换任意3D数组值



我有以下数组:

array = [[[1,2],[4,5]],[[6,7],[8,9]]];

我想获得以下结果:

easyArray = [[[2,1],[5,4]],[[7,6],[9,8]]];

我尝试了

function swapCoordinates(array){
var a=0;
var b=0;
    for (j=0;j<array[0].length;j++){
        for (k=0;k<array[0][0].length;k++){
            var swap = array[a][b][0];
            array[a][b][0] = array[a][b][1];
            array[a][b][1] = swap
            console.log(a);
            a++;
            console.log(b);
        }
        console.log(a);
        console.log(b);
        b++
    }
return array;
}

问题是,我不知道如何正确递增B以获得例如阵列[1,0,0] ...

我在做什么错?

您可以通过检查项目是否是内部有另一个数组的数组来使用递归方法。

然后映射阵列或返回交换的项目。

var array = [[[1, 2], [4, 5]], [[6, 7], [8, 9]]],
    swapped = array.map(function swap(a) {
        return Array.isArray(a) && Array.isArray(a[0])
            ? a.map(swap)
            : a.slice().reverse();
    });
    
console.log(swapped);
.as-console-wrapper { max-height: 100% !important; top: 0; }

您可以按照以下操作;

var array  = [[[1,2],[4,5]],[[6,7],[8,9]]],
    swap3D = ([e0,e1,...es]) => e0 ? Array.isArray(e0) ? [swap3D(e0)].concat(swap3D([e1,...es]))
                                                       : [e1,e0]
                                   : [],
    result = JSON.stringify(swap3D(array));
console.log(result);

最新更新