首页 > 解决方案 > 基于 es6 中的属性名称分解动态对象值

问题描述

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.

获得过滤后的名称值后,我需要映射到产品接口属性值

我需要根据选定的值映射值,并且剩余的属性为空。我怎样才能在解构中做到这一点?

我可以在 switch case 中执行此操作并检查名称并映射值,在 es6 解构对象中有什么方法可以做

我发现的解决方案:

传入的动态对象

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]}`);
     };

标签: typescriptecmascript-6javascript-objectsdestructuringecmascript-2016

解决方案


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

推荐阅读