2016-09-20 6 views
0

配列の中にインデックス値を入力することによって、次のような質問が表示される場合は、[0][2][1]の値を得るにはどうすればよいでしょうか?answer = [0, 2, 1]配列で多次元配列にアクセスする

var question = [ [ ['x', 'x', 'x'], ['x', 'x', 'x'], ['x', 'x', 'x'] ], [ ['x', 'x', 'x'], ['x', 'x', 'x'], ['x', 'x', 'x'] ], [ ['x', 'x', 'x'], ['x', 'x', 'x'], ['x', 'x', 'x'] ] ]; var answer = [0,2,1]; question.get(answer); // Is there a way like this?

question.get(答)またはquestion.get([0、2、1])のような方法はありますか?

+1

あなたは 'question [0] [2] [1]'を意味しますか? – vlaz

+0

いいえ、これは答えから正確な値を入力することを意味します。私は動的な方法を探していました。応答配列がユーザーの応答に基づいて構築されているかどうかを検討してください。 –

+0

私は今参照してください。その場合、@ adeneoの答えを見てください。それはまさにあなたが望むものです。 – vlaz

答えて

1

ハードコーディングされた方法はあり:

question[answer[0]][answer[1]][answer[2]]; 

や配列またはネストされた配列の任意の長さのために:

var question = [ 
     [ 
     ['x', 'x', 'x'], 
     ['x', 'x', 'x'], 
     ['x', 'x', 'x'] 
     ], 
     [ 
     ['x', 'x', 'x'], 
     ['x', 'x', 'x'], 
     ['x', 'x', 'x'] 
     ], 
     [ 
     ['x', 'x', 'x'], 
     ['x', 'x', 'x'], 
     ['x', 'x', 'x'] 
     ] 
    ]; 

var answer = [0,2,1]; 

    var getanswer= function(answerinput,questioninput){ 
     var val = questioninput; 
     answerinput.forEach(function(item){ 
     val = val[item]; 
     }); 
     return val; 
    } 


    console.log(getanswer(answer,question)); 
+0

ダイナミックパーツは完璧です。私はループを実行せずにこれを達成する方法があることを願った。私はupvoteへの評判を所有していません。未来をするだろう。ありがとうございました。 –

+0

@OwthamanRooben私はループを持たない唯一の方法はハードコードすることだと思う、また私はあなたがupvoteできない場合は、答えを受け入れることができると信じています。私はこれがあなたを助けてくれてうれしいです! –

0

は、あなたが入力としてquestion配列を使用することができますので、あなたは、Array#reduceを使用することができますし、指定されたanswer配列を反復して結果として値を取得します。

var question = [[['000', '001', '002'], ['010', '011', '012'], ['020', '021', '022']], [['100', '101', '102'], ['110', '111', '112'], ['120', '121', '122']], [['200', '201', '202'], ['210', '211', '212'], ['220', '221', '222']]], 
 
    answer = [0, 2, 1], 
 
    getItem = function (array, path) { 
 
     return path.reduce(function (a, p) { return a[p]; }, array); 
 
    }; 
 

 
console.log(getItem(question, answer));

ES6

var question = [[['000', '001', '002'], ['010', '011', '012'], ['020', '021', '022']], [['100', '101', '102'], ['110', '111', '112'], ['120', '121', '122']], [['200', '201', '202'], ['210', '211', '212'], ['220', '221', '222']]], 
 
    answer = [0, 2, 1], 
 
    getItem = (array, path) => path.reduce((a, p) => a[p], array); 
 

 
console.log(getItem(question, answer));

0

Object.prototype.getNestedValue = function(...a) { 
 
    return a.length > 1 ? (this[a[0]] !== void 0 && this[a[0]].getNestedValue(...a.slice(1))) : this[a[0]]; 
 
}; 
 

 
var question = [ 
 
     [ 
 
     ['1', '2', '3'], 
 
     ['4', '5', '6'], 
 
     ['7', '8', '9'] 
 
     ], 
 
     [ 
 
     ['a', 'b', 'c'], 
 
     ['d', 'e', 'f'], 
 
     ['g', 'h', 'i'] 
 
     ], 
 
     [ 
 
     [':', ',', '?'], 
 
     ['#', '$', '%'], 
 
     ['+', '!', '&'] 
 
     ] 
 
    ]; 
 
console.log(question.getNestedValue(...[0,2,1])); 
 
console.log(question.getNestedValue(...[1,2,0])); 
 
console.log(question.getNestedValue(...[2,0,1]));
...のは、いくつかの楽しみを持ってみましょう