Правила базы данных в реальном времени - Проверьте, включает ли данный массив newData.val () - PullRequest
1 голос
/ 18 марта 2019

У меня есть свойство в моей 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() одному из упомянутых значений, без лишних шаблонов?

1 Ответ

1 голос
/ 18 марта 2019

Один из способов сжать это - использовать регулярное выражение.Итак, в соответствии с вашим примером, вы можете использовать ".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/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...