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 如何解决?