JS多维数组修改值
JS multidimensional array modify value
我在一个函数中,从父容器获取多维数组。提取的数组并不总是具有相同的维度(可以是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]][...]
因为尺寸并不总是相同的。
我可以用coordinates_array的长度做一个切换案例,但这将非常糟糕,因为我的multi_dim_arrays可以在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;
也不起作用。
给定1d数组中要修改的坐标和新值,如何以通用方式更新多维数组(具有不同维度)?
示例:
我可以将作为参数
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
所有这些都在尽可能少的代码行中(没有检查coordinates_array长度的开关情况)。
我找到了一个解决方案:
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个不同的数组(顶部、左侧、宽度、高度)…)。
经过几次性能测试,我决定选择一个"丑陋"的交换机案例:
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次迭代的简单调用测试,切换用例解决方案比eval()解决方案快500倍以上(完成切换用例需要10毫秒,而完成eval测试需要5000毫秒)。
如果有人找到了比开关盒更干净的解决方案,我仍然感兴趣,即使它的性能有点差(不过不超过2倍;3倍)。
相关文章:
- JavaScript:如何在迭代过程中修改数组中的值
- Emscripten:调用修改数组元素的 C 函数
- 在循环时修改数组是否安全
- 无法通过在节点.js中切片来修改数组
- JavaScript/AngularJS修改数组中的属性
- 使用非对称数据修改数组
- 迭代时修改数组
- Javascript函数不修改数组(引用?)
- 如何修改数组中对象的属性
- 如何使用回溯递归修改数组元素
- 使用$.grep()修改数组
- 如何在Javascript中修改数组的内容
- 修改数组原型会导致foreach的行为不同
- 如何将字符串拆分为数组,修改数组然后应用于javascript中的字符串
- 修改数组对象的值
- 修改数组.forEach自动将上下文设置为调用者
- 修改数组中的每个单词
- Javascript修改数组对象属性
- 如何修改数组中的对象,然后返回该数组的新版本
- 修改数组字符串的值