Rxjs映射子对象加父对象

时间:2017-03-09 05:34:05

标签: angular rxjs rxjs5

我有来自http get

的回复
{
    "parents": [{
        "id": 1
        , "children": [{
                "name": "child1"
            }
            , {
                "name": "child2"
            }]
    }, {
        "id": 2
        , "children": [{
                "name": "child1"
        }]
    }]
}

我有这个界面

export interface Child {
    parentId: string
    , name: string
}

问题

我应该使用哪个地图来获取子项数组(在订阅的响应中),以及父项的名称和ID?

getChildren(): Observable<Child[]> {    
    return this.http
        .get(API_URL)
        .//map function;
}

或者至少,告诉我在哪里寻找某种答案

提前致谢。

1 个答案:

答案 0 :(得分:1)

您可以使用一个map()运算符,然后在其中使用Array.forEach()Array.map()

const Observable = Rx.Observable;

data = {
  "parents": [{
    "id": 1
    , "children": [{
      "name": "child1"
    }
      , {
        "name": "child2"
      }]
  }, {
    "id": 2
    , "children": [{
      "name": "child1"
    }]
  }]
};

Observable.of(data)
  .map(data => {
    let results = [];
    data['parents'].forEach(item => {
      results = results.concat(item['children'].map(child => {
        return {
          'parentId': item.id,
          'name': child.name,
        };
      }));
    });

    return results;
  })
  .subscribe(val => console.log(val));

这将打印以下内容(包含对象作为单个发射的数组):

[ { parentId: 1, name: 'child1' },
  { parentId: 1, name: 'child2' },
  { parentId: 2, name: 'child1' } ]