我试图按'version'对数组进行排序,然后识别所有以'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语句的方式有关。
我在做什么错了。
答案 0 :(得分:-1)
for...in
构造没有按照您的想法做。它旨在迭代对象。因此,在这种情况下,它将newArray
视为对象,但将属性名称作为数组索引。 Javascript中的数组只是具有数字属性名称的对象。更具体地说,如果您将代码更改为:
for (let i in newarray) {
if (i.version.startsWith('iPad')) {
console.log(i);
}
}
您会清楚地看到问题所在。 i
是数字,而不是作业对象。
答案 1 :(得分:-1)
修复:
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