猿问

在 Angular 中将项目推送到具有多个 if 情况的数组

我是 TypeScript 的新手,正在从事 Angular 项目。


我正在进行 API 调用并对接收到的数据进行一些操作:


public data_Config: IConfig[] = [];


this.getService.Data(input).subscribe(

    data => {

        this.data_Config = data;

        this.data_Config.forEach(itm => { 

            if(itm.aFl == 'Y'){

                itm.Levels.push('A')

            }

            if(itm.bFl == 'Y'){

                itm.Levels.push('B')

            }

            if(itm.cFl == 'Y'){

                itm.Levels.push('C')

            }

        });

        this.dataSource_prgmConfiguration = new MatTableDataSource(this.data_prgmConfiguration);

        this.dataSource_prgmConfiguration.paginator = this.paginatorPrgmConfiguration;

        this.dataSource_prgmConfiguration.sort = this.sortPrgmConfiguration;

});

IConfig有几个属性,包括 10-12 标志属性,如aFl, bFl, cFl。在曾经为真的 Flag 属性中,我想将它们添加到数组中。我已经使用 if 条件以一种简单的方式完成了它,但是如果需要 11-12 个标志,那么有没有更好的方法来实现这个?


添加 IConfig

export interface IConfig {

    TypeNm: string;

    aFl: string;

    bFl: string;

    cFl: string;

    dFl: string;

    eFl: string;

    fFl: string;

    gFl: string;

    hFl: string;

    PlaceHolder: string;

    Association: string;

    ActiveFl: string;

    Actions: string;

    AssociatedProgramsStr?: string;

    Levels?: string[];

}


有只小跳蛙
浏览 102回答 3
3回答

胡说叔叔

根据需求有多种方式,我假设IConfig接口只有aF1, bF1, cF1 ...布尔属性,那么你可以像下面这样,解决方案:1  this.data_Config.forEach(itm => {       Object.keys(itm).forEah(key=>{          if(this.data_Config[key] === 'Y'){                itm.Levels.push('whatever'); // I don't know exactly what 'A','B' n all represent           }      })          });解决方案:2假设IConfig接口是否有一些其他属性,例如height,width一些非布尔值,在这种情况下你可以执行以下操作,const booleanProperties = ['aF1', 'bF1', 'cF1']; // define bool properties in arraythis.data_Config.forEach(itm => {        Object.keys(itm).forEah(key=>{           if(booleanProperties.includes(key) && this.data_Config[key] === 'Y'){                 itm.Levels.push('whatever'); // I don't know exactly what 'A','B' n all represent           }       })           });

MMTTMM

你可以这样做:Object.keys(this.dataConfig).filter(key => key.indexOf('Fl') != -1).forEach(flag => {    if(this.dataConfig[flag] == 'Y')        itm.Levels.push(this.dataConfig[glag].charAt(0).toUpperCase());}仅当所有标志都与 xFl 相同时,此代码才有效,其中 x 是某个字母,并且此标志引用需要推送到 Levels 数组的相同大写字母。一点解释:首先你从你的对象中提取作为标志的键,然后你迭代它们并检查你的条件。

慕丝7291255

在打字稿中,您可以创建ENUM这样的。enum enumVal {  aFl  = 'A',  bFl  = 'B'}然后在迭代中检查值并添加到您想要的结果中。result:any[] = [];this.data_Config.forEach(key=>{ if(this.data_Config[key] === 'Y'){    result.push(enumVal[key]);  }});
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答