TypeError: Cannot read properties of undefined (reading 'length') - 想要解释为啥代码这样说
Posted
技术标签:
【中文标题】TypeError: Cannot read properties of undefined (reading \'length\') - 想要解释为啥代码这样说【英文标题】:TypeError: Cannot read properties of undefined (reading 'length') - Would like an explanation of why the code is saying thisTypeError: Cannot read properties of undefined (reading 'length') - 想要解释为什么代码这样说 【发布时间】:2022-01-04 09:31:29 【问题描述】:任务:创建一个函数,如果内部数组包含某个数字,则删除数组的外部元素。 IE filtersArray([[10, 8, 3], [14, 6, 23], [3, 18, 6]], 18) 应该返回 [[10, 8, 3], [14, 6, 23]]]
如果可能的话,我想解释一下导致此错误时代码到底在做什么/读取什么,而不是仅仅提供一个解决方案。
我已将我的思考过程作为注释包含在此代码中 - 所以希望如果我在某处有错误,可以指出。
function filteredArray(arr, elem)
let newArr = [];
// Only change code below this line
newArr = [...arr]; //copying the arr parameter to a new arr
for (let i=0; i< newArr.length; i++) //iterating through out array
for (let x= 0; x< newArr[i].length; x++) //iterating through inner array
if(arr[i][x] === elem) //checking each element of the inner array to see if it matches the elem parameter
newArr.splice(i, 1); //if true, removing the entire outer array the elem is inside
// Only change code above this line
return newArr;
console.log(filteredArray([[3, 2, 3], [1, 6, 3], [3, 13, 26], [19, 3, 9]], 3));
【问题讨论】:
【参考方案1】:当您在最后一次迭代中找到值时,您拆分外部数组并仍然迭代内部数组,但使用外部数组的原始索引。通过缩小长度,它现在指向长度,任何尝试使用属性访问 undefined
都会出错。
要克服这个问题并保持外部索引正确,您可以从最后一个索引开始并向后迭代。
除此之外,您还可以打破内部搜索,因为在查找时,您不需要更多地迭代这个数组。
【讨论】:
这很难理解和 100% 理解,但我想我明白了它的主要要点。谢谢!【参考方案2】:当您尝试访问 undefined
变量的属性时会发生此错误。
您很可能从您的线路中得到这个:
for (let x= 0; x< newArr[i].length; x++)
如果你的参数 arr
不是一个数组,那么 newArr[0]
将是未定义的,所以 `newArr[0].lenght 会抛出这个错误。
【讨论】:
感谢您的回复 - 出于好奇,为什么arr
不是数组。由于我在这里使用了扩展运算符:newArr = [...arr];
- 据我了解,这应该将参数中的数组复制到 newArr
中。
对不起,我的意思是如果arr
不是数组数组。你说得对,newArr
永远是一个数组,但 newArr[i] 可能不是一个数组以上是关于TypeError: Cannot read properties of undefined (reading 'length') - 想要解释为啥代码这样说的主要内容,如果未能解决你的问题,请参考以下文章
TypeError: Cannot read properties of undefined (reading 'app') (Flutter web app)
TypeError: Cannot read properties of undefined (reading 'length') - 想要解释为啥代码这样说
Uncaught (in promise) TypeError: Cannot read properties of null (reading 'fingerprint') Laravel Live
D3.js 一直遇到这个错误 TypeError: Cannot read properties of null (reading 'ownerDocument')?
React Material UI:Appbar 给出了 TypeError: Cannot read properties of undefined (reading '100')
TypeError: Cannot read property 'scrollIntoView' of null 如何解决?