我正在切换到本地的反应,并希望利用他们的内置查询/过滤。我有3个可能选项的复选框过滤器,选中的选项作为数组传递:
var filters = ['complete', 'inProgress', 'notStarted']
如何在不使用多个if / else语句的情况下进行过滤?
let subdivisions = realm.objects('Subdivision');
let result = subdivisions.filtered('statusSurvey == $0',['complete','notStarted']);
或者是否有必要使用普通的javascript或lodash?
答案 0 :(得分:2)
您是否在询问如何动态构建一个领域查询字符串,该字符串将根据当前过滤器返回结果?
如果我理解正确,您可以构建您的查询字符串,如:
var query = 'statusSurvey == ';
for (var i = 0; i < filters.length; i++) {
query += `'${filters[i]}'`;
if (i + 1 < filters.length) {
query += ` OR statusSurvey == `
}
}
var result = subdivisions.filtered(query);
答案 1 :(得分:1)
这是另一种方法,无需在字符串中构建查询,并且必须转义过滤器值:
filters = ['a', 'b', 'c']
const realmFilter = [Array(filters.length).fill().map((x, i)=> `statusSurvey == $${i}`).join(" OR ")].concat(filters)
realm.objects('Subdivision').filtered(...realmFilter)