如何在TypeScript中使用ToLowerCase筛选数组
我在TypeScript中自定义了数组如何在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:
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)
)