我的RTDB中有一个属性,它只能是以下之一:false, 5, 15, 30, 60
。
所以我试图以多种方式写这个条件而没有任何成功:
// Like in Firestore rules:
".write": "newData().val() in [false, 5, 15, 30, 60]"
// Like in ES6:
".write": "[false, 5, 15, 30, 60].includes(newData().val())"
// Like the old way:
".write": "[false, 5, 15, 30, 60].indexOf(newData().val()) > -1"
所以我最终得到了:
".write": "(newData.val() === false || newData.val() === 5 || newData.val() === 15 || newData.val() === 30 || newData.val() === 60"
有什么方法可以检查newData.val()
是否等于上述值中的一个而没有太多的样板?
压缩这种方法的一种方法是使用正则表达式。所以根据你的例子,你可以使用".write": "(newData.val()+'').matches(/^(false|5|15|30|60)$/)"
。
但是,您可能希望对数据类型更加严格,因此这样的事情将是理想的:".write": "newData.val() === false || (newData.isNumber() && (newData.val()+'').matches(/^(5|15|30|60)$/))"
这是演示行为的小提琴:http://jsfiddle.net/katowulf/m5gzt423/