如何从JavaScript中的函数将值设置为n维数组?

时间:2012-10-24 22:21:41

标签: javascript arrays

从函数设置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);

1 个答案:

答案 0 :(得分:3)

您的功能无法按设计运行,需要每个维度的索引

您需要以下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);