我怎样才能摆脱错误-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<hold.length && clothes[i][0] < 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] 进行比较并且是<
所以 count++
clothes[1] 与 hold[1] 进行比较,但没有 hold[1],所以会出现错误
在while
中添加子句
while (count < hold.length && clothes[i][8] < hold[count][8])
count ++;
;
注意必须首先检查长度,否则您仍然会遇到相同的错误(还有其他方法,例如 break
和 while
)。如果第一部分是true
,则&&
的第二部分是only valuated。
您还有其他问题停止了完整的解决方案:
for (let i = 0; i < (clothes.length - 1); i++)
将循环到长度为 1,所以如果你有 3 个元素,你只会得到两个。你需要使用任何一个
i<clothes.length
i<=(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'”