Detsructuruing Dynami c Значения объектов на основе имен свойств в es6 - PullRequest
0 голосов
/ 06 мая 2020
let filter: Product = {
  name: 'nokia',
  price: 20,
  createdDate: '12-12-2019'
}

Здесь я деструктурирую код на основе фильтра.

Фильтр имеет события, которые предоставляют данные в следующем формате:

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

"filters":{"name ":{"value":"sss","matchMode":"equals"}}
if i choose price  it will given below .

"filters":{"price ":{"value":"20","matchMode":"equals"}}

Здесь я деструктурировал данные на основе свойств.

  let {name,price,createdDate}= event.filters;

       console.log(name,'name'); // here name  i will get {"value":"20","matchMode":"equals"}

       console.log(price,'price'); // it is undefined.

как только я получу отфильтрованное значение имени, мне нужно сопоставить значение свойства интерфейса продукта

Мне нужно сопоставить значение на основе выбранных значений, а оставшееся свойство должно быть пустым. как я могу сделать это при деструктуризации?

Я могу сделать это в случае переключения и проверить имя и сопоставить значение, есть ли способ сделать это в объекте деструктуризации es6

Решение I найдено:

Входящая динамика c объекты

let x=  event.filters; // "filters":{"name ":{"value":"sss","matchMode":"equals"}}

// предопределенные начальные значения

let filter: Product = {
  name: 'nokia',
  price: 20,
  createdDate: '12-12-2019'
}


// predefinded objects
       for (let property in   filter) {  

        for(let m in x){
inner objects
          if(m === property)
          {
            console.log(`1Object key= ${property}  and 2ObjectValues= ${x[m].value}` );


          // assigned incoming values to matched object property
            filter[property]= x[m].value;


          }

        }
      // console.log(`key= ${property} value = ${filter[property]}`);
     };

Ответы [ 2 ]

1 голос
/ 06 мая 2020
filters = event.filters;
const filteredProducts = products.filter(product => {
  for (const field of Object.keys(filters)) {
    const filter = filters[field];
    const val = product[field];
    switch (filter.matchMode) {
      case 'equals':
        if (val !== filter.value) return false;
        break;
      case 'greater':
        if (val <= filter.value) return false;
        break;
      case 'less':
        if (val >= filter.value) return false;
        break;
      // etc...
    }
  }
  return true;
});
0 голосов
/ 06 мая 2020

может быть лучше реструктурировать данные фильтра с:

"filters":{"name ":{"value":"sss","matchMode":"equals"}}

на что-то вроде:

"filters":[{"field": "name/price/etc", "value":"sss", "matchMode":"equals"}, ...]

, чтобы вы могли фильтровать такие продукты, как:

filters = event.filters;
const filteredProducts = products.filter(product => {
  for (let i = 0; i < filters.length; i++) {
    const filter = filters[i];
    const val = product[filter.field];
    switch (filter.matchMode) {
      case 'equals':
        if (val !== filter.value) return false;
        break;
      case 'greater':
        if (val <= filter.value) return false;
        break;
      case 'less':
        if (val >= filter.value) return false;
        break;
      // etc...
    }
  }
  return true;
});
...