交换任意3D数组值

时间:2018-02-08 12:03:55

标签: javascript arrays

我有以下数组:

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以获得例如array [1,0,0] ...

我做错了什么?

2 个答案:

答案 0 :(得分:1)

您可以通过检查项是否是包含其他数组的数组来使用递归方法。

然后映射数组或返回交换项。

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; }

答案 1 :(得分: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);