繁体   English   中英

为什么我在此 for 循环中无法读取未定义的属性“startsWith”?

[英]Why am I getting Cannot read property 'startsWith' of undefined in this for loop?

我正在尝试按“版本”对数组进行排序,然后识别以“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 语句有关。

我在这里做错了什么。

for...in构造并没有按照您的想法进行操作。 它旨在迭代对象。 所以在这种情况下,它将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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM