在遍历多维数组时记录当前下标。
这个函数在遍历多维数组的过程中应该记录当前的索引。
为了简化起见,我将在一个基本的二维数组上演示它:
[[1,2,3],[4,5,6]]
它应该输出如下内容:
value: 1 index: [0,0]
value: 2 index: [0,1]
value: 3 index: [0,2]
value: 4 index: [1,0]
value: 5 index: [1,1]
value: 6 index: [1,2]
它当前记录的是:
value: 1 index: [0,0]
value: 2 index: [0,1]
value: 3 index: [0,2]
value: 4 index: [0,1,0]
value: 5 index: [0,1,1]
value: 6 index: [0,1,2]
我找不到在何处/何时重置索引,以去掉多余的0,使之准确。
let arr = [[1,2,3],[4,5,6]]
function traverseDeep(arr, index) {
index.push(0)
for (let n = 0; n < arr.length; n++) {
index[index.length-1] = n
if (Array.isArray(arr[n])) {
traverseDeep(arr[n], index); // Recursively jump inside the nested array
} else {
console.log('value: '+arr[n]+' index: ['+index+']')
}
}
}
traverseDeep(arr, [])
解决方案
你忘记移除在每次函数调用中创建的数组项:
对于数组 [1,2,3](n=0),我们得到索引的值为:
[0,0], [0,1], [0,2]
现在,对于第二个数组 [4,5,6](n=1),我们从索引等于 [0,2] 开始。
该命令
index[index.length-1] = n
会修改最后一个位置,其值为 2:
[0, 1]
为纠正这一点,请使用函数 pop() 来移除递归中创建的索引(或使用一个辅助变量,如同其他答案中的做法):
index.pop()
let arr = [[1,2,3],[4,5,6]]
function traverseDeep(arr, index) {
index.push(0)
for (let n = 0; n < arr.length; n++) {
index[index.length-1] = n
if (Array.isArray(arr[n])) {
traverseDeep(arr[n], index); // Recursively jump inside the nested array
} else {
console.log('value: '+arr[n]+' index: ['+index+']')
}
}
index.pop();
}
traverseDeep(arr, [])
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。