提问人:John Smith 提问时间:10/4/2022 更新时间:10/4/2022 访问量:154
使用数组作为嵌套数组的键?
Use array as keys for nested array?
问:
我有一个如下所示的嵌套数组。
var arr1 = ['a', 'b', ['c', 'd'], ['e', 'f']];
有没有办法使用另一个未嵌套的数组作为 的键?arr1
var arr1 = ['a', 'b', ['c', 'd'], ['e', 'f']];
var arr2 = [3, 0];
var arr3 = [4, 1];
console.log(arr1[arr2]); // should return 'c' like arr1[3][0]
console.log(arr1[arr3]); // instead of arr1[4][1]; should return 'f'
有没有一个功能可以让我这样做?
答:
1赞
JRose
10/4/2022
#1
您可以创建自己的函数来实现此行为,如下所示:
function nested_access(arr1, arr2) {
let ret = arr1;
arr2.forEach((index) => {
ret = ret[index];
});
return ret;
}
const arr1 = ['a', 'b', ['c', 'd'], ['e', 'f']];
const arr2 = [2, 0];
const arr3 = [3, 1];
console.log(nested_access(arr1, arr2)); // should return 'c'
console.log(nested_access(arr1, arr3)); // should return 'f'
0赞
epascarello
10/4/2022
#2
只是一个简单的方法,减少走树。(我更改了您的示例索引,因为它们已关闭)
const lookUp = (arr, indexes) =>
indexes.reduce(
(acc, index) => acc[index],
arr);
var arr1 = ['a', 'b', ['c', 'd'],
['e', 'f']
];
var arr2 = [2, 0];
var arr3 = [3, 1];
console.log(lookUp(arr1, arr2));
console.log(lookUp(arr1, arr3));
0赞
jsejcksn
10/4/2022
#3
可以通过使用属性访问器数组迭代访问属性来查找值:
function findValue (obj, propertyAccessors) {
try {
let result = obj;
for (const key of propertyAccessors) result = result[key];
return result;
}
catch {
return undefined;
}
}
const arr1 = ['a', 'b', ['c', 'd'], ['e', 'f']];
const arr2 = [2, 0];
const arr3 = [3, 1];
console.log(findValue(arr1, arr2)); // "c"
console.log(findValue(arr1, arr3)); // "f"
console.log(findValue(arr1, [2, 2, 3])); // undefined
如果尝试访问不存在的属性,则结果将为 。如果继续尝试访问 上的另一个属性,则会引发异常。通过使用 try...catch
,你可以捕获这样的错误并返回.undefined
undefined
undefined
0赞
Jose Marin
10/4/2022
#4
试试这个:
function getValue(arr, arrKeys)
{
return arrKeys.reduce(
(acum, current) => acum?.[current]
, arr
)
}
var arr1 = ['a', 'b', ['c', 'd'], ['e', 'f']];
var arr2 = [2, 0];
var arr3 = [3, 1];
console.log(getValue(arr1, arr2))
console.log(getValue(arr1, arr3))
-1赞
PeterKA
10/4/2022
#5
您可以按如下方式创建数组方法:Array#getNested
Array.prototype.getNested = function(index) {
let out = this;
index.forEach(i => out = out[i]);
return out;
}
const arr1 = ['a', 'b', ['c', 'd'], ['e', 'f'], ['g',['h',['i', 'j']]]];
const arr2 = [2, 0];
const arr3 = [3, 1];
const arr4 = [4, 1, 1, 0];
console.log( arr1.getNested(arr2) );
console.log( arr1.getNested(arr3) );
console.log( arr1.getNested(arr4) );
下一个:如何从嵌套数组中解构所有对象?
评论
get
const c = arr2.reduce((acc, el) => acc[el], arr1);
-> 返回“e”,因为索引 3 有“e”、“f”arr2
[2, 0]
arr3
[3,1]
[3, 0]
应该返回,而不是,应该返回......e
c
[4, 1]
undefined