我不知道为什么这不起作用。我知道问题出在条件if(arr[i][j]===elem)
的第八行。
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
。
答案 0 :(得分:4)
您的问题是您正在修改循环内数组的长度。您的循环内部有arr.splice(i,1)
;每次调用时,您的数组都会缩短1
。最终,您的数组变得太短,您试图越界读取项目。您可以通过注释if
块内的那一行来证明这一点;您的代码将正确运行。
我不确定您要在newArr
中输入什么值,但是没有理由修改arr
以获取您的值。只需从arr
中读取所需的值,然后将其推入newArr
,就不会有任何问题。
顺便说一句,与使用arr.filter()
之类的本机数组方法相比,您是否有任何理由需要使用for
循环?