在Typescript / Javasript中

时间:2019-03-22 12:22:35

标签: json angular typescript

当前,我正在使用嵌套的forEach遍历JSON数据。但是我想知道在Typescript或RXJS中还有其他任何简单可行的方法可用,因为我在少数情况下也对Observable进行了迭代。 这是代码段和stackblitz https://stackblitz.com/edit/angular-dz3wl2?file=src%2Fapp%2Fapp.component.ts

遍历JSON应该返回htmltypes数组和inlineTags数组中具有“ type”属性的对象。有人可以在不使用forEach方法的情况下指导我检索想要的对象吗?

content.data.areas.forEach(sectionBlock => {
  sectionBlock.sections.forEach(obj => {
    obj.htmltypes.forEach(val => {
      console.log(val);
      if (val.inlineTags.length > 0) {
        val.inlineTags.forEach(tag => {
          console.log(tag);
        })
      }
    })
  })
})

1 个答案:

答案 0 :(得分:1)

没有比这更简单的方法了,但是您可以减少它与某些rxjs或数组运算符(例如Array.prototype.flatMap)的嵌套,但是要使用它,您应该像core-js/es7/array/flat-map那样包含polyfill。您的代码看起来像

content.data.areas
 .flatMap(sectionBlock => sectionBlock.sections)
 .flatMap(obj => obj.htmltypes)
 .flatMap(val => val.inlineTags)
 .forEach(tag => console.log(tag));

使用rxjs可以通过类似的方式完成

from(content.data.areas).pipe(
 concatMap(sectionBlock => sectionBlock.sections)
 concatMap(obj => obj.htmltypes)
 concatMap(val => val.inlineTags)
).subscribe(tag => console.log(tag));