Javascript 为什么我无法读取属性';从'开始;在这个for循环中未定义的?
我试图按“版本”对数组进行排序,然后识别所有以“iPad”开头的字符串 以下代码不记录任何内容并返回错误Javascript 为什么我无法读取属性';从'开始;在这个for循环中未定义的?,javascript,arrays,object,vue.js,ecmascript-6,Javascript,Arrays,Object,Vue.js,Ecmascript 6,我试图按“版本”对数组进行排序,然后识别所有以“iPad”开头的字符串 以下代码不记录任何内容并返回错误 orderedUsers: function () { let newarray = sortBy(this.jobs, 'version').reverse() for (let i in newarray) { if (i.version.startsWith('iPad')) { console.log(i.version); } } ret
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语句有关
我在这里做错了什么。构造没有做你在这里想的事情。它被设计用于迭代对象。因此,在本例中,它将newArray
视为一个对象,但将属性名作为数组索引。Javascript中的数组只是具有数字属性名的对象。更具体地说,如果您将代码更改为:
for (let i in newarray) {
if (i.version.startsWith('iPad')) {
console.log(i);
}
}
你会清楚地看到问题所在<代码>i是一个数字,而不是作业对象。修复:
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
这是什么.jobs
?for..in
用于迭代对象<循环中的code>i是数组中的索引。索引没有版本属性。你看,我想我在回答你的最后一个问题时已经提到了这一点:相关:为什么你把中的链接到一本关于生锈的书上?这是一个错误。现在修好了。不过你很快!谢谢@Choc13:)你真的应该把Jack的答案标记为正确,而不是再次发布他的解决方案。我用amy最初的评论来修正-但如果是同一件事,你会把jacks标记为正确的