我不明白为什么这不起作用。我知道问题来自条件 if(arr[i][j]===elem)
的第 8 行。
function filteredArray(arr, elem) {
let newArr = [];
for (let i = 0; i < arr.length; i++) {
for(let j = 0; j < arr[i].length; j++) {
if(arr[i][j]===elem) {
newArr.push(arr.splice(i,1));
}
}
}
return newArr;
}
如果我在控制台中输入如下测试:
console.log(filteredArray([[3, 2, 3], [1, 6, 3], [3, 13, 26], [19, 3, 9]], 3));
我得到错误 arr[i] is undefined
。
最佳答案
您的问题是您正在修改循环内数组的长度。你的循环内部有 arr.splice(i,1)
;每次调用时,您的数组都会缩短 1
。最终,您的数组变得太短,并且您试图越界读取一个项目。您可以通过在 if
block 中注释掉该行来证明这一点;您的代码将无错误地运行。
我不确定您要在 newArr
中放入什么值,但是没有理由修改 arr
来获取您的值。只需从 arr
中读取你想要的值,然后将其推送到 newArr
,你就没有问题了。
顺便说一句,与使用原生数组方法(如 arr.filter()
)相比,您是否有任何理由必须使用 for
循环? ?
关于javascript - 为什么在我的 JS 嵌套数组中得到 "arr[i] is undefined"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53892176/