typescript - 基于 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]}`);
};
解决方案
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;
});