为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

有只小跳蛙 2022-12-09 16:53:12
我是 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 个标志,那么有没有更好的方法来实现这个?添加 IConfigexport 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[];}
查看完整描述

3 回答

?
胡说叔叔

TA贡献1804条经验 获得超8个赞

根据需求有多种方式,


我假设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 array


this.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           }

       })

           

});


查看完整回答
反对 回复 2022-12-09
?
MMTTMM

TA贡献1869条经验 获得超4个赞

你可以这样做:


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 数组的相同大写字母。一点解释:首先你从你的对象中提取作为标志的键,然后你迭代它们并检查你的条件。


查看完整回答
反对 回复 2022-12-09
?
慕丝7291255

TA贡献1859条经验 获得超6个赞

在打字稿中,您可以创建ENUM这样的。


enum enumVal {

  aFl  = 'A',

  bFl  = 'B'

}

然后在迭代中检查值并添加到您想要的结果中。


result:any[] = [];

this.data_Config.forEach(key=>{

 if(this.data_Config[key] === 'Y'){

    result.push(enumVal[key]); 

 }

});


查看完整回答
反对 回复 2022-12-09
  • 3 回答
  • 0 关注
  • 101 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信