Javascript JS多维数组修改值

Javascript JS多维数组修改值,javascript,multidimensional-array,Javascript,Multidimensional Array,我在一个函数中,从父容器获取多维数组。获取的数组并不总是具有相同的维度—可以是1D、2D、3D、4D等 我有一个1D数组的参数,包含坐标和值 function(coordinates_array, value) { var muti_dim_array = getArrayByName(another_param); } 不幸的是,我做不到 multi_dim_array[coordinates_array[0]][coordinates_array[1]][...] 因为尺寸不总是

我在一个函数中,从父容器获取多维数组。获取的数组并不总是具有相同的维度—可以是1D、2D、3D、4D等

我有一个1D数组的参数,包含坐标和值

function(coordinates_array, value) {
    var muti_dim_array = getArrayByName(another_param);
}
不幸的是,我做不到

multi_dim_array[coordinates_array[0]][coordinates_array[1]][...]
因为尺寸不总是相同的

我可以用坐标数组的长度做一个切换,但那将是非常糟糕的,因为我的多维数组可以在1D和10D之间

我尝试的是:

function(coordinates_array, value) {
    var multi_dim_array = getArrayByName(another_param);
    //Transform "[1, 2, 3]" in "[1][2][3]"
    var coord = JSON.stringify(coordinates_array).replace(/,/g, '][');
    var array_value = eval('multi_dim_array'+coord);

    array_value = value;
}
但从那以后就不起作用了

multi_dim_array[1][2][3]
没有更新

这是:

eval('multi_dim_array'+coord) = value;
也不行

给定一维数组中要修改的坐标和新值,如何以通用方式更新具有不同维数的多维数组

示例:

我可以把它作为参数

coordinates_array = [1, 5, 6, 7]
coordinates_array = [2, 3]
coordinates_array = [8]
我想做什么

multi_dim_array[1][5][6][7] = value
multi_dim_array[2][3] = value
multi_dim_array[8] = value

所有这些都是在尽可能少的代码行中进行的,没有开关情况下检查坐标数组长度。

我找到了一个解决方案:

function(coordinates_array, value) {
    var multi_dim_array = getArrayByName(another_param);
    //Transform [1, 2, 3] in "[1][2][3]"
    var coord = JSON.stringify(coordinates_array).replace(/,/g, '][');

    eval('multi_dim_array' + coord + ' = ' + value);
}
但我不太满意。 有人能找到更好的解决办法吗

或者有人能告诉我我的方法在性能方面是否良好。我会经常调用这个方法:总共有700多个多维数组,它们都可以经常升级,就像我调整div大小时一样,我需要更新4个不同的数组top、left、width、height等等

经过几次性能测试后,我决定采用“丑陋”的开关外壳:

function(coordinates_array, value) {
    var multi_dim_array = getArrayByName(another_param);

    switch(coordinates_array.length) {
        case 1: multi_dim_array[coordinates_array[0]] = value;break;
        case 2: multi_dim_array[coordinates_array[0]][coordinates_array[1]] = value;break;
        case 3: multi_dim_array[coordinates_array[0]][coordinates_array[1]][coordinates_array[2]] = value;break;
        case.....
    }
}
事实上,对于一个超过100000次迭代的简单调用测试,switch case解决方案比eval one快500倍以上,完成switch case需要10毫秒,而完成eval测试需要5000毫秒


如果有人找到比开关箱更干净的解决方案,我仍然感兴趣,即使它的性能稍差,不超过2倍;3次。

请显示数组大小写。例如,坐标\u array=[1,2,3,4,5,6]或[1,2,3],我想做多维度数组[1][2][3][4][5][6]=值或多维度数组[1][2][3]=值