2016-09-20 10 views
0

Wenn das folgende ist mein Fragefeld, wie kann ich den Wert in der Position [0][2][1] durch die Bereitstellung der Indexwerte in einem Array zB: answer = [0, 2, 1].Zugriff auf ein mehrdimensionales Array mit einem Array

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?

Gibt es Art und Weise wie question.get (Antwort) oder question.get ([0, 2, 1])?

+1

meinst du 'Frage [0] [2] [1]'? – vlaz

+0

Nein. Ich denke, das bedeutet, dass die genauen Werte aus der Antwort eingegeben werden müssen. Ich war auf der Suche nach einer dynamischen Methode. Überlegen Sie, ob das Antwort-Array auf der Antwort des Benutzers basiert. –

+0

Ich sehe jetzt. Sehen Sie sich die Antwort von @ adeneo an, in diesem Fall - genau das, was Sie wollen. – vlaz

Antwort

1

Es gibt eine hart codierte Art und Weise:

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

oder für jede Länge eines Arrays oder verschachtelte Array:

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

Dynamischer Teil ist perfekt. Ich wünschte, es gäbe einen Weg, dies zu erreichen, ohne eine Schleife zu führen. Ich habe keinen guten Ruf, um zu verbessern. Will Zukunft machen. Vielen Dank. –

+0

@OwthamanRooben Ich denke, der einzige Weg, keine Schleife zu haben, wäre hart zu programmieren, auch ich glaube, dass Sie die Antwort akzeptieren können, wenn Sie nicht upvote können. Ich bin froh, dass dir das geholfen hat! –

0

Sie Array#reduce nutzen könnten, weil Sie die question Array als Eingabe verwenden können, und Holen Sie den Wert als Ergebnis, indem Sie das angegebene answer Array durchlaufen.

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

Lassen Sie uns etwas Spaß haben ...

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]));

Verwandte Themen