2

関数から 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);
4

1 に答える 1

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);
于 2012-10-24T22:30:32.853 に答える