2016-09-20 127 views
0

如果以下是我的數組問題,那麼如何通過在數組中提供索引值(例如:answer = [0, 2, 1])來獲取位置[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

你是指'問題[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我認爲不循環的唯一方法是硬編碼,也相信如果你無法贊成,你可以接受答案。我很高興這對你有幫助! –

0

你可以使用Array#reduce,因爲你可以使用question數組作爲輸入和通過迭代給定的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]));