如何在TypeScript中使用ToLowerCase筛选数组

如何在TypeScript中使用ToLowerCase筛选数组,typescript,filter,Typescript,Filter,我在TypeScript中自定义了数组 array = [{ name: "Hardik", city: null, job: null }, { name: "John", city: "Ahmedabad", job: "IT" }, { name: "Margie", city: "Mumbai", job: "CA" }, { name: "Creature", city: "Banglore", job: null }, { name: "Smooth", city:

我在TypeScript中自定义了数组

 array = [{ name: "Hardik", city: null, job: null },
  { name: "John", city: "Ahmedabad", job: "IT" },
  { name: "Margie", city: "Mumbai", job: "CA" },
  { name: "Creature", city: "Banglore", job: null },
  { name: "Smooth", city: null, job: null }];
我想根据城市和工作筛选此数组。另外,我需要检查不区分大小写。所以我改成小写

this.filter = this.array.filter(i =>
  i.job.toLowerCase().indexOf('ca') != -1 ||
  i.city.toLowerCase().indexOf('ahmedabad') != -1 
)
如果列不为null,则其工作正常。如果该列为null,则会给出错误,不能为null的lowercase()。所以,我首先检查列是否为null

this.filter = this.array.filter(i =>
      i["job"] != null ? i.job.toLowerCase().indexOf('ca') != -1 : false ||
      i["city"] != null ? i.city.toLowerCase().indexOf('ahmedabad') != -1 : false
    )
但它给出了错误的输出

[ { "name": "Margie", "city": "Mumbai", "job": "CA" } ]
预期产出为:

 [{ name: "John", city: "Ahmedabad", job: "IT" },
  { name: "Margie", city: "Mumbai", job: "CA" }]
链接:


问题是由于运算符优先级

我可以通过如下更改代码来获得正确答案:

this.filter = this.array.filter(i =>
  (i["job"] && i.job.toLowerCase().indexOf('ca') != -1) ||
  (i["city"] && i.city.toLowerCase().indexOf('ahmedabad') != -1) 
)

这里的具体问题是,
|
更紧密地结合在一起:。那么
是真的吗?false:false | | true
被解释为
true?假:(假| |真)
而非
(真?假:假)| |真
。如果有疑问,请使用括号。谢谢@jcalz的解释。虽然我让它工作,但我不知道为什么OP的解决方案不工作。现在我明白了。是的,如果我用偏执狂,我的答案也能用请解释为什么/如何解决这个问题
this.filter = this.array.filter(i =>
  (i["job"] && i.job.toLowerCase().indexOf('ca') != -1) ||
  (i["city"] && i.city.toLowerCase().indexOf('ahmedabad') != -1) 
)