我有一个2D数组,想要使用另一个数组访问,例如:
var arr = [['one','two'],['three','four']];
var arr2 = [1,1];
我希望在arr [arr2 [0]] [arr2 [1]]中得到值。是否有另一种获取价值的方法,因为如果我这样做,那行就会变得极长且难以阅读。
类似的东西:
arr[arr2]
我知道这不起作用,但JavaScript中有类似内容吗?
答案 0 :(得分:1)
您可以使用索引来减少数组,使用默认数组来存在不存在的内部数组。
function getValue(array, indices) {
return indices.reduce((a, i) => (a || [])[i], array);
}
var array = [['one', 'two'], ['three', 'four']],
indices = [1, 1];
console.log(getValue(array, indices));

答案 1 :(得分:0)
使用arr[arr2[0]][arr2[1]]
代替arr[arr2]
。因为,在arr
的嵌套数组中只有两个数组值,您可以为0
指定索引1
和arr2
作为arr
的索引。其格式为arr[index1][index2]
var arr = [['one','two'],['three','four']];
var arr2 = [1,1];
console.log(arr[arr2[0]][arr2[1]]);

答案 2 :(得分:0)
将reduce
与try/catch
一起使用,以确保不会出现会引发错误的值(例如arr2 = [1,1,2,3,4]
)
function evaluate(arr1, arr2)
{
try
{
return arr2.reduce( (a, c) => a[c], arr);
}
catch(e) {}
}
<强>演示强>
function evaluate(arr1, arr2) {
try {
return arr2.reduce((a, c) => a[c], arr)
} catch (e) {}
}
var arr = [['one','two'],['three','four']];
var arr2 = [1,1];
console.log(evaluate(arr, arr2))
&#13;
答案 3 :(得分:0)
您可以在arr2
上使用Array#reduce并将arr
作为初始数组传递。
<强>演示强>
let arr = [['one','two'],['three','four']],
arr2 = [1,1],
res = arr2.reduce((a,c) => a[c], arr);
console.log(res);
&#13;
答案 4 :(得分:0)
这是另一种选择:
一个简单的for-loop
var arr = [ ['one', 'two'], ['three', 'four'] ],
indexes = [1, 1];
Array.prototype.getFrom = function(indexes) {
var current;
for (var index of indexes) current = current ? current[index] : this[index];
return current;
}
console.log(arr.getFrom(indexes));
&#13;
.as-console-wrapper { max-height: 100% !important; top: 0; }
&#13;
<script src="https://codepen.io/egomezr/pen/dmLLwP.js"></script>
&#13;