首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >RxJS将三元组的属性组合到表中

RxJS将三元组的属性组合到表中
EN

Stack Overflow用户
提问于 2017-04-10 20:50:35
回答 1查看 194关注 0票数 2

我有一个产生类似三元组的对象的服务。它们将采用这种格式:

代码语言:javascript
代码运行次数:0
运行
复制
{ country, attribute, value }

示例:

代码语言:javascript
代码运行次数:0
运行
复制
{ country: 'usa',    attribute: 'population', value: 100 }
{ country: 'mexico', attribute: 'population', value: 200 }
{ country: 'usa',    attribute: 'areaInSqM',  value: 3000 }

最后,我想把这些显示成一张桌子。行是国家,列是属性。所以这张桌子看起来像:

代码语言:javascript
代码运行次数:0
运行
复制
| country | population | areaInSqM |
| usa     | 100        | 3000      |
| mexico  | 200        |           |

我的假设(可能是错误的)是,我需要创建一个中间数据结构,它是一个行数组。例如:

代码语言:javascript
代码运行次数:0
运行
复制
[ { country: 'usa', population: 100, areaInSqM: 3000 }, .... ] 

我目前的解决方案是一个非RxJS混乱的对象,其中我存储一个包含每个属性类型的集合,存储一个按国家索引的查找对象,并在最后将查找对象转换回上述数组。很多循环和双储藏室,我宁愿避免。

RxJS是否有任何帮助这类操作的操作员?

有没有更聪明的方法?

在这种情况下,假设是:

  • 这些属性是不知道的。
  • 这些值总是数字的。
  • 给定的“单元格”可以为空。在本例中,从未提供墨西哥areaInSqM。

编辑: Plunkr与解决方案:https://plnkr.co/edit/FVoeVmmzMN7JGJ3zWFQM?p=preview

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-04-10 22:05:48

在您的问题中有两个组件,数据结构部分和数据流部分(我假设您将这些数据作为一个流,即一个一个地得到,这就是您使用Rxjs的原因)。

迭代构建数据结构的一个简单方法是使用scan运算符。例如:

代码语言:javascript
代码运行次数:0
运行
复制
myDataStructure$ = dataSource$.scan(function (accDataStructure, triple){
  accDataStructure[triple.country] = accDataStructure[triple.country] || {}
  accDataStructure[triple.country][triple.attribute] = accDataStructure[triple.country][triple.attribute] || {}
  accDataStructure[triple.country][triple.attribute] = triple.value
  return accDataStructure
}, {})

这就假设dataSource$生成形状为{ country, attribute, value }的对象。然后,myDataStructure$将为每一个传入的数据输出您正在寻找的迭代构建的数据结构。如果您只希望该数据结构在构建完成后,只需向.last()添加一个myDataStructure$即可。

这是没有测试的,所以请告诉我这是否有效。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43332674

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档