从函数设置n维数组的最佳方法是哪一种?
var v1 = [1,2,3];
var v2 = [[1,2],[3,4]];
// only valid for 1-dimension
function set(arr, dim, v) {
arr[dim] = v;
}
set(v1, 2, 33);
最佳答案
您的函数无法按设计工作,需要为每个维度创建索引
您需要类似以下http://jsfiddle.net/nZmJT/1/的内容
function setValueInArray(arr, value, index /*, index, index, ... */ ) {
var arrToSet = arr;
for (var i = 2; i < arguments.length - 1; i++) {
arrToSet = arr[arguments[i]];
}
arrToSet[arguments[i]]= value;
return arr;
}
var v1 = [1,2,3];
var v2 = [[1,2],[3,4]];
console.log( setValueInArray(v1, 0, 0) ); // [0,2,3]
console.log( setValueInArray(v2, 0, 0, 0) ); //[[0,2],[3,4]]
请与我们分享您为什么要这么做。我想不出可以普遍适用于多个维度的代码,您通常都知道该维度,然后将其设置为...
v1[2][3] = 'anything';
由于在您的情况下,您将不知道要传递多少索引(否则您将仅使用方括号访问),因此以下选项可能更合适
function setValueInArray(arr, value, indexes) {
var arrToSet = arr;
for (var i = 0; i < indexes.length - 1; i++) {
arrToSet = arr[indexes[i]];
}
arrToSet[indexes[i]] = value;
return arr;
}
然后,您可以调用它传递由控件外部的某些代码创建的索引数组。
setValueInArray(v1, 0, indexes);