如何简化代码的变量?

问题描述 投票:0回答:2

我有6个标签,每个标签都有一个对象。我正在从服务器接收数据,并使用选项卡名称对其进行过滤。

     var a = {} // First Tab Object
    var b = {} // Second Tab Object
    var c = {} // Third Tab Object
    var d = {}// Fourth Tab Object
    var e = {};// Fifth Tab Object
    var f = {};// Sixth Tab Object

this.getService.getData().subscribe( res =>{
    let data = res.filter(data=>{
    return data.oType == this.tabclickedName
    }) 

    if (this.tabclickedName == 'One' ){
    this.a = data
    }
    else if (this.tabclickedName == 'Two' ){
    this.b = data 
    }
    else if (this.tabclickedName == 'Three' ){
    this.c = data 
    }
    else if (this.tabclickedName == 'Four' ){
    this.d = data 
    }
})

1。 //从服务中过滤数据以便单击选项卡

2。 // this.tabclickedName =单击的选项卡名称

问题1:-现在我必须编写if else这样的语句来为指定选项卡分配数据

如何使此代码更具动态性,这样我就不必编写if else语句?

问题2:-如何避免在这种情况下使用过滤器,并在使用管道或任何其他rxjs运算符的服务调用中使用rxjs运算符解决问题?

使用的方法:-

let hashTab = {One :'a',two :'b',three:'c',four:'d',five:'e',six:'f'}
let dataTabName = this.hashTab[this.tabclickedName];

此方法中的问题:-dataTabName是一个字符串,我希望插入该变量以存储数据

javascript json angular typescript
2个回答
0
投票

您可以通过使变量名与选项卡名相对应来放弃if-els。

然后您可以写:

this[this.tabclickedName] = data;

完成。


0
投票

与先前版本具有相同的逻辑,但进行了较小的更正您可以做的是将所有对象放在一个对象内,然后重命名子对象。

实施例:

let obj:any = {
    'one': {},
    'two': {},
    'three': {}
}
if(this.tabclickedName != undefined && this.tabclickedName != '')
    this.obj[this.tabclickedName.toLowerCase()] = data
© www.soinside.com 2019 - 2024. All rights reserved.