簡體   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