在Jade中使用indexOf

Jac*_*die 6 javascript node.js express pug

在这里与Jade和Express合作.

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

'#{user.username}' 是一个字符串.

想要做 if '#{value.users}'.indexOf('#{user.username}')

如果为true,那么我会显示一堆东西,否则,不应该渲染.

Jade的语法很好,但即使#{value.users}'.indexOf('#{user.username}')是假的,也会呈现if语句中的内容.

例如,如果user.username = bob和value.users = ['tim', 'billy'],则if语句正在传递,但显然不应该.

我究竟做错了什么?

Mik*_*ser 6

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

#{}执行内部的任何js命令.你应该能够将整个表达式整合到一个单独的表达中'#{}'

通过说if '#{value.users}'.indexOf('#{user.username}')'#{value.users}'序列化为字符串并使用.indexOf()它在字符串中搜索,而不是原始数组.

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

- if ( value.users.indexOf(user.username) )
    p some jade
- else
    p alternate jade
Run Code Online (Sandbox Code Playgroud)

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

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

http://underscorejs.org/#indexOf

如果您想在Jade模板中使用它,请务必在您的应用中要求()它或请求本地人.


jam*_*non 5

我不熟悉Jade,但你不需要测试!= -1或== 1?

 str.indexOf('#{user.username}') ! = -1
Run Code Online (Sandbox Code Playgroud)

或者因为你正在测试一个数组,所以有些东西.

 array.toString().indexOf('#{user.username}') != -1
Run Code Online (Sandbox Code Playgroud)

更新:随着ES6的出现,我在下面稍微更新了一下

 array.includes('#{user.username}') // returns true or false
 str.includes('#{user.username}') // returns true or false
Run Code Online (Sandbox Code Playgroud)