尝试根据 Typescript 元素中现有的内容添加类型保护

问题描述 投票:0回答:1

我正在尝试在 Typescript 中创建一个条件来检查名称中是否已存在特定单词。

我有这个功能:


isOrganic() {
    for (let i = 0; i < this.items.length; i++) {
      if(this.items[i].organic) {
        if (' (Organic)' in this.items){
          this.items[i].name = this.items[i].name
        } else {
          this.items[i].name = this.items[i].name.concat(' (Organic)')
        }
      }
    }
  }

我想检查“(有机)”标签是否已经存在。如果是,则按原样使用名称。如果不存在,请添加它。相反,它只是不断地一遍又一遍地添加标签...... 所以:

Apple (Organic) (Organic) (Organic) etc...

我知道问题出在这一行:

if (' (Organic)' in this.items)

我只是不知道如何设置条件。

typescript conditional-statements typeguards
1个回答
0
投票

这将实现你想要的:

if this.items[i].name.endsWith(' (Organic)')

首先,您需要全面深入了解该项目的名称。然后,您需要在字符串上调用

contains
endsWith
等方法,因为
in
运算符不适用于字符串。

完整示例:

class Foo {
  constructor() {
    this.items = []
  }

  isOrganic() {
    for (let i = 0; i < this.items.length; i++) {
      if (this.items[i].organic) {
        if (this.items[i].name.endsWith(' (Organic)')){
          this.items[i].name = this.items[i].name
        } else {
          this.items[i].name = this.items[i].name.concat(' (Organic)')
        }
      }
    }
  }
}

const foo = new Foo()

// test data
foo.items = [ 
  { name: "A", organic: false },
  { name: "B", organic: true },
  { name: "C (Organic)", organic: true },
]

foo.isOrganic()
console.log(foo.items)

© www.soinside.com 2019 - 2024. All rights reserved.