为啥我在这个 for 循环中无法读取未定义的属性“startsWith”?
Posted
技术标签:
【中文标题】为啥我在这个 for 循环中无法读取未定义的属性“startsWith”?【英文标题】:Why am I getting Cannot read property 'startsWith' of undefined in this for loop?为什么我在这个 for 循环中无法读取未定义的属性“startsWith”? 【发布时间】:2019-11-02 16:21:21 【问题描述】:我正在尝试按“版本”对数组进行排序,然后识别所有以“iPad”开头的字符串。
以下代码不记录任何内容并返回错误。
orderedUsers: function ()
let newarray = sortBy(this.jobs, 'version').reverse()
for (let i in newarray)
if (i.version.startsWith('iPad'))
console.log(i.version);
return newarray
错误:
TypeError: Cannot read property 'startsWith' of undefined
如果我删除 for 循环并放入:
orderedUsers: function ()
let newarray = sortBy(this.jobs, 'version').reverse()
return newarray
列表按版本正确排序。这让我觉得这个错误与我编写 for 循环或 if 语句的方式有关。
我在这里做错了什么。
【问题讨论】:
什么是this.jobs
?
for..in
用于迭代对象。循环中的i
是数组中的索引。索引没有版本属性。见developer.mozilla.org/en-US/docs/Web/javascript/Reference/…
我想我已经在回答你最后一个问题时提到了这一点:***.com/questions/56674240/…
why am i getting 'i is not defined' error from a simple for loop in vue.js component script?的可能重复
相关:***.com/a/29397769/621962
【参考方案1】:
for...in
构造并没有按照您的想法进行操作。它旨在迭代对象。所以在这种情况下,它将newArray
视为一个对象,但将属性名称作为数组索引。 Javascript 中的数组只是具有数字属性名称的对象。更具体地说,如果您将代码更改为:
for (let i in newarray)
if (i.version.startsWith('iPad'))
console.log(i);
您会清楚地看到问题所在。 i
是一个数字,而不是一个作业对象。
【讨论】:
你为什么将for...in
链接到一本关于 Rust 的书?
这是一个错误。现在修好了。不过你的速度很快!
谢谢@Choc13 :)【参考方案2】:
修复:
orderedUsers: function ()
let newarray = sortBy(this.jobs, 'version').reverse()
for (let i in newarray)
if (newarray[i].version.startsWith('iPad'))
console.log(newarray[i].version);
return newarray
【讨论】:
您真的应该将 Jack 的答案标记为正确,而不是再次发布他的解决方案。 我使用了 amy 的初始评论来修复 - 但如果这是同一件事,我会将千斤顶标记为正确以上是关于为啥我在这个 for 循环中无法读取未定义的属性“startsWith”?的主要内容,如果未能解决你的问题,请参考以下文章
为啥我在 React 中得到“无法读取未定义的属性(读取 'map')”,而没有语法错误
对于循环和矩阵迭代问题:TypeError:无法读取未定义的属性“0”
为啥我会收到“未捕获的类型错误:无法读取未定义的属性 'body'”?