Rxjs遍历嵌套对象

时间:2017-11-22 16:19:27

标签: angular typescript rxjs rxjs5

RxJS如何从嵌套的对象数组中获取特定的属性值

const obj = {
      name: 'campus',
      buildings: [
        {
          name: 'building',
          floors: [
            {
              name: 'floor'
            }
          ]
        }
      ]
    };

有没有办法在RxJS中获取名称。基本上我需要输出[校园,建筑,楼层]

Observable.of(obj).map((res) => res.name).subscribe((val) => console.log(val));

我知道如何在不使用RxJS的情况下执行此操作。但我想知道如何使用RxJS。 提前致谢

目前我正在做类似下面的事情

const names = [];
    names.push(obj.name);
    obj.buildings.forEach((building) => {
      names.push(building.name);
      building.floors.forEach((floor) => {
        names.push(floor.name);
      });
    });
    console.log(names);

1 个答案:

答案 0 :(得分:2)

这应该有效:

getNames(obj) {
    const names = [];
    names.push(obj.name);
    obj.buildings.forEach((building) => {
      names.push(building.name);
      building.floors.forEach((floor) => {
        names.push(floor.name);
      });
    });
    return names;
}

Observable.of(obj).map((res) => this.getNames(res)).subscribe((val) => console.log(val));

您正在将一个值更改为另一个,最简单的就是这样。没有一种特殊的反应方式来对单一价值采取行动。反应方法用于随着时间的推移对值流进行操作,因为它代表的是,您在流中的单个值上运行,因此最好将其视为一个而不是跳过箍来尝试以“反应方式”执行操作”。如果你试图从一系列对象中随时间收集“名称”属性,那么这将是一个不同的故事,在这种情况下你可以使用reduce或scan。