ES6 / Typescript:堆叠映射和过滤高级数组方法

时间:2018-02-15 13:47:16

标签: javascript arrays typescript ionic-framework ecmascript-6

我在Ionic / Angular中有以下界面(为清晰起见,减去细节),这就是我使用Typescript / ES6的原因:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:tel="http://service.example/" xmlns:ent="http://schemas.datacontract.org/2004/07/Service.Contract">
   <soapenv:Header/>
   <soapenv:Body>
      <tel:InsertObject>
         <!--Optional:-->
         <tel:object>
            <!--Optional:-->
            <ent:Date>2018-02-15T11:05:00</ent:Date>
            <!--Optional:-->
            <ent:Time>01:00:00</ent:Time>
            <!--Optional:-->
            <ent:ID>0</ent:ID>
            <!--Optional:-->
            <ent:Name>TestName</ent:Name>
         </tel:object>
      </tel:InsertObject>
   </soapenv:Body>
</soapenv:Envelope>

我需要编写一个函数来表示ingoing表对象,但是表中的checkins都按其状态进行过滤。

这是我提出的功能:

export interface Item {
  statusOfItem: string;
}
export interface checkin {
  items: Array<Item>;
}
export interface table {
  checkins: Array<Checkin>;
}

我想使用像地图等新的数组函数。这可以更有效地完成/编写(例如,没有transformTable(table: Table, status: string): Table{ let newTable: Table = table; newTable.checkins = table.checkins.map( checkin => { let newCheckin: Checkin = checkin; newCheckin.items = checkin.items.filter( item => item.statusOfItem == status ); return newCheckin; } ) return newTable; } )。

任何帮助或反馈都会非常适用。

2 个答案:

答案 0 :(得分:1)

我相信您不需要将函数的参数重新设置为新的let变量。只要按原样使用它们。

transformTable(table: Table, status: string): Table{
  table.checkins = table.checkins.map(checkin => {
      checkin.items = checkin.items.filter( item => item.statusOfItem == status )
      return checkin
   })
  return table
}

这也应该有用。无论如何,我一直这样做,并且它有效:)

答案 1 :(得分:0)

对于有兴趣的人,感谢defaultdictBergi我最终得到了这段代码:

', '

谢谢你们两位。我不知道,那个javascript无法复制对象! :(那太令人沮丧了......