[软件设计/软件工程] Rxjs将Json文档中数组映射到新数组类型

[复制链接]
发表于 2022-5-6 13:50:09
问题
我正在通过角度服务从 PouchDB 检索文档。文档以下列格式检索:
  1. {
  2. "_id":"segments",
  3. "_rev":"1-4f0ed65cde23fe724db13bea1ae3bb13",
  4. "segments":[
  5.     { "name":"Aerospace" },
  6.     { "name":"Auto repair" },
  7.     { "name":"Commercial" },
  8.     { "name":"Education" },
  9.     { "name":"Energy" },
  10.     { "name":"Farm/ranch" },
  11.     { "name":"Furniture" },
  12.     { "name":"Heavy Equipment" },
  13.     { "name":"Hobbyist" },
  14.     { "name":"Infrastructure" },
  15.     { "name":"Luxury/Leisure" },
  16.     { "name":"Military" },
  17.     { "name":"MUP" },
  18.     { "name":"Processing" },
  19.     { "name":"Rail" },
  20.     { "name":"Transportation" }
  21. ]}
复制代码

我想将它映射到一个新数组,如下所示:
  1. [
  2.   { value: "Aerospace", viewValue: "Aerospace" },
  3.   { value: "Auto Repair", viewValue: "Auto Repair" },
  4.   { value: "Commercial", viewValue: "Commercial" }
  5.   ...
  6. ]
复制代码

为此,我在我的服务中尝试了以下代码:
  1. getSegments(): Observable<any[]> {
  2.   return from(this.database.get('segments'))
  3.   .pipe(
  4.     map((results) => results.segments)
  5.   );
  6. }
复制代码

我将组件中的数组转换为:
  1. segments: SegmentsLookup[] = [];
  2. ...
  3. this.lookupDbService.getSegments()
  4.   .subscribe(data => {
  5.     data.forEach(element => {
  6.       this.segments.push({value: element.name, viewValue: element.name});
  7.   });
  8. });
复制代码

这可行,但我知道有一种方法可以将其正确映射回服务代码。此外,当这样做时,编译器会抱怨“结果”。段'陈述'属性'段'类型 {} 上不存在。

如何将检索到的数据映射到服务的“getSegments”中的所需数组?方法?

回答
您可以分两步执行转换:
  1. let transformedData = observableData.pipe(
  2.   map(data => {
  3.     console.log(data, data.segments.length);
  4.     return data.segments.map(element => {
  5.       return { value: element["name"], viewValue: element["name"] };
  6.     });
  7.   })
  8. );

  9. transformedData.subscribe(data => {
  10.   this.mylist = data;
  11. });
复制代码






上一篇:如何从C#中的文件中读取 key=value
下一篇:PayPal IPN 在返回时会丢失会话?

使用道具 举报

Archiver|手机版|小黑屋|吾爱开源 |网站地图

Copyright 2011 - 2012 Lnqq.NET.All Rights Reserved( ICP备案粤ICP备14042591号-1粤ICP14042591号 )

关于本站 - 版权申明 - 侵删联系 - Ln Studio! - 广告联系

本站资源来自互联网,仅供用户测试使用,相关版权归原作者所有

快速回复 返回顶部 返回列表