我怎样才能摆脱错误-TypeError:无法读取未定义的属性'8'

Posted

技术标签:

【中文标题】我怎样才能摆脱错误-TypeError:无法读取未定义的属性\'8\'【英文标题】:How can I get rid of error - TypeError: Cannot read property '8' of undefined我怎样才能摆脱错误-TypeError:无法读取未定义的属性'8' 【发布时间】:2022-01-15 01:08:27 【问题描述】:

while 语句不断抛出错误(TypeError: Cannot read property '8' of undefined)但是 console.log 仍然输出它应该输出的结果。

 var hold = [];
 for (let i = 0; i < (clothes.length - 1); i++) 
   let count = 0;
   if (hold.length === 0) 
     hold.push(clothes[i]);
    else 
     console.log(clothes[i][8], hold[count][8]);
     while (clothes[i][8] < hold[count][8]) 
       count++;
     
     hold.slice(count, 0, clothes[i]);
   
 

【问题讨论】:

您将count 的长度增加至超出hold 的长度 @TheRakeshPurohit 请不要编辑并将var 更改为let - 这通常是问题的原因(在这种情况下不太可能)。保持作者的意图。 @freedomn-m 我添加了一行以防止计数超过保持的长度,但我仍然遇到相同的错误 - while ((clothes[i][8] 这就是我删除答案的原因,它完全工作 - 致力于一个完整的解决方案,而不仅仅是那个部分 - 改变比较的顺序,所以长度检查第一:while (count&lt;hold.length &amp;&amp; clothes[i][0] &lt; hold[count][0]) 下一个问题是您使用的是slice 而不是splice 【参考方案1】:

这部分代码增加了count,超出了hold[]的长度

while (clothes[i][8] < hold[count][8])
  count ++;
;

手动单步执行:

clothes[0] 被“if hold is empty 子句”添加为 hold[0] clothes[1] 与 hold[0] 进行比较并且是 &lt; 所以 count++ clothes[1] 与 hold[1] 进行比较,但没有 hold[1],所以会出现错误

while中添加子句

while (count < hold.length && clothes[i][8] < hold[count][8])
  count ++;
;

注意必须首先检查长度,否则您仍然会遇到相同的错误(还有其他方法,例如 breakwhile)。如果第一部分是true,则&amp;&amp; 的第二部分是only valuated。


您还有其他问题停止了完整的解决方案:

for (let i = 0; i < (clothes.length - 1); i++)

将循环到长度为 1,所以如果你有 3 个元素,你只会得到两个。你需要使用任何一个

i&lt;clothes.length i&lt;=(clothese.length-1)

hold.slice(count, 0, clothes[i]);

不是.slice 的语法,并且 slice 返回一个新数组,不会更改数组。这应该是

hold.splice(count, 0, clothes[i]);

给出一个更新的 sn-p:

var clothes = [[2],[1],[3]];

var hold = []
for (let i = 0; i < clothes.length; i++) 
  var count = 0;
  if (hold.length === 0) 
    hold.push(clothes[i]);
   else 
    while (count<hold.length && clothes[i][0] < hold[count][0]) 
      count++;
    ;
    if (count == hold.length) 
      hold.push(clothes[i])
    
    else  
      hold.splice(count, 0, clothes[i]);
    
  

console.log(hold.join(","));

【讨论】:

以上是关于我怎样才能摆脱错误-TypeError:无法读取未定义的属性'8'的主要内容,如果未能解决你的问题,请参考以下文章

挂载钩子中的错误:“TypeError:无法读取未定义的属性 'allStage'”

我收到一个错误 [Vue 警告]:渲染错误:“TypeError:无法读取未定义的属性‘名称’”

jQuery DataTables 错误 - TypeError:无法读取未定义的属性“fnInit”

[Vue 警告]:渲染错误:“TypeError:无法读取未定义的属性 'NomeStr'”

TypeError:无法读取未定义 Passpor 错误的属性“名称”

错误 TypeError:无法读取未定义的属性(读取“跳过”)Typescript/Api