【问题标题】:Using indexOf in Jade在 Jade 中使用 indexOf
【发布时间】:2013-02-12 10:27:05
【问题描述】:

在这里与 Jade & Express 合作。

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

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

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

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

Jade 的语法没问题,但即使 #{value.users}'.indexOf('#{user.username}') 是假的,if 语句中的内容也会被渲染。

例如,如果 user.username = bob 和 value.users = ['tim', 'billy'],则 if 语句正在通过,而它显然不应该通过。

我做错了什么?

【问题讨论】:

  • 检查['tim', 'billy'].indexOf('bob') 产生的结果:-1。不是假值 (0)

标签: javascript node.js express pug


【解决方案1】:

不应该是#{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

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

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

http://underscorejs.org/#indexOf

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

【讨论】:

    【解决方案2】:

    我不熟悉 Jade,但您不需要针对 != -1 或 == 1 进行测试吗?

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

    或者由于您正在针对数组进行测试,因此类似于。

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

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

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

    【讨论】:

    • array.toString() 完全改变了代码的含义。
    猜你喜欢
    • 2012-06-23
    • 2015-07-31
    • 1970-01-01
    • 1970-01-01
    • 2013-07-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多