Выполнить методы в цепочке на основе массива элементов - PullRequest
0 голосов
/ 18 сентября 2018

даже не уверен, как озаглавить этот вопрос. Извиняюсь за это заранее.

По сути, у меня есть массив проверенных элементов, который выглядит следующим образом:

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) => ... 

Каков наиболее эффективный способ объединения этих методов на основе моего массива элементов? Какие-нибудь советы? Если не ясно, я могу уточнить дальше.

Спасибо

Ответы [ 2 ]

0 голосов
/ 18 сентября 2018

Может быть, что-то вроде этого поможет:

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
  );

Вместо назначения ваших флажков для checked_items вы можете использовать свойство value элементов фильтра (или его индекс, чтобы вы знали, какое значение устанавливать, когда онопроверить / снят)

0 голосов
/ 18 сентября 2018

Вам нужно знать как имя поля, по которому вы хотите выполнить запрос, так и значение, по которому вы хотите выполнить фильтрацию.В коде, которым вы поделились, вы показываете только имя, но в моем ответе я предполагаю, что у вас также есть список значений.

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(...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...