我有一个对象
pages = {
url1: 'page1',
url2: 'page2',
url3: 'page3',
url4: 'page4',
url5: 'page5',
url6: 'page6'
}
我有一个从路由器获取页面URL的功能
在函数中,我使用object.keys遍历对象值,如果其中一个值匹配,则应设置其他变量。
我想使用三元语句,但是有人可以告诉我为什么它不起作用吗?
正常的if语句可以...
private pages(): void {
this.subs = this.router.events
.pipe(
filter((event) => event instanceof NavigationEnd)
)
.subscribe((event) => {
let index: number;
let found: boolean;
Object.keys(this.progressUrls).map((key, i) => {
if (this.progressUrls[key] === event['url']){
// This works
found = true;
more stuff....
}
// The below does not work
event['url'] === this.progressUrls[key] ? (found = true, index = i) : (found = false, index = 0)
});
});
}
答案 0 :(得分:1)
两个代码不相同
if
中,当条件为found
且没有true
语句时,请将true
的值设置为else
。这意味着一旦将其设置为true,它将一直保持true,直到循环结束为止,并且没有代码将其设置为false
found
的值设置为true
或false
,这意味着当循环结束时,值是循环中最后一项的结果< / li>
所以这些代码在逻辑上是不同的
如果将else
语句添加到if
并设置found = false
,则代码和结果的逻辑将是相同的(尽管它可能不是您期望的结果)
如果您需要与简单的逻辑相同(如果采用三元方式),请使用以下内容
event['url'] === this.progressUrls[key] ? (found = true, index = i) : (index = 0);