在Jade中使用indexOf

在这里使用Jade&Express。

'#{value.users}'是一个数组。

'#{user.username}'是一个string。

试图做if '#{value.users}'.indexOf('#{user.username}')

如果是的话,那么我显示一堆东西,否则,不应该被渲染。

Jade与语法正常,但即使在#{value.users}'.indexOf('#{user.username}')是虚假的时候,if语句中的内容也正在呈现。

例如,如果user.username = bob ,并且value.users = ['tim', 'billy']if语句传递,当它显然不应该。

我究竟做错了什么?

不应该是#{value.users.indexOf(user.username)}

#{}内的任何js命令都会被执行。 您应该能够将您的整个expression式放在一个'#{}'

通过说if '#{value.users}'.indexOf('#{user.username}') '#{value.users}'被序列化为一个string,并且当使用.indexOf()它将在string,而不是原始数组。

如果你在if语句中使用它,为什么不直接执行js呢? 例如。

 - if ( value.users.indexOf(user.username) ) p some jade - else p alternate jade 

https://github.com/visionmedia/jade#a8

或者,您可以使用下划线库。

http://underscorejs.org/#indexOf

如果您想在Jade模板中使用它,请确保在您的应用程序或请求当地人中需要()。

我不熟悉Jade,但是你不需要testing!= -1或== 1吗?

  str.indexOf('#{user.username}') ! = -1 

或者因为你正在对一个数组进行testing,所以我们沿着这条线进行testing

  array.toString().indexOf('#{user.username}') != -1 

更新:随着ES6的到来,我更新了一下

  array.includes('#{user.username}') // returns true or false str.includes('#{user.username}') // returns true or false