甚至不确定如何为这个问题加上标题。提前为此道歉。
基本上,我有一系列选中的项目,如下所示:
const checked_items = ['brand', 'frame_gender', 'sku'...];
我想查询一个Firebase数据集,例如:
db.collection('glasses')
// .where('brand' , '==' , 'brand')
// .where('frame_gender' , '==' , 'Male')
// .where('sku' , 'array-contains' , 'sku-here')
.get()
.then( (snapshot) => ...
根据我的商品数组将这些方法链接起来的最有效方法是什么?有小费吗?如果不清楚,我可以进一步澄清。
谢谢
答案 0 :(得分:2)
您需要同时知道要查询的字段的名称和要过滤的值。在您共享的代码中,您仅显示名称,但在我的回答中,我假设您还具有值列表。
const checked_items = ['brand', 'frame_gender', 'sku'];
const checked_values = ['brand', 'Male', 'sku_here'];
现在,您可以遍历字段名称,并为每个字段创建一个新查询。
var query = db.collection('glasses');
checked_items.forEach(function(field, index) {
var value = checked_values[index]);
query = query.where(field, "==", value);
});
query.get().then(...
答案 1 :(得分:1)
也许这样会有所帮助:
const filter = [
{ key: 'brand', op: '==', value: 'brand' },
{ key: 'frame_gender', op: '==', value: 'Male' },
{ key: 'sku', op: 'array-contains', value: 'sku-here' },
];
//...
const filteredQuery = filter
.filter(item=>item.value!==undefined)
.reduce(
(query,{key,op,value})=>query.where(key,op,value),
query
);
您可以使用过滤器项的value属性(或它的索引,以便您知道在选中/未选中时要设置的值),而不是将复选框分配给checked_items