gpt4 book ai didi

javascript - RxJS 将属性从三元组组合到一个表

转载 作者:行者123 更新时间:2023-11-29 21:07:32 25 4
gpt4 key购买 nike

我有一个服务生成类似于三元组的对象。它们将采用以下格式:

{ country, attribute, value }

例子:

{ country: 'usa',    attribute: 'population', value: 100 }
{ country: 'mexico', attribute: 'population', value: 200 }
{ country: 'usa', attribute: 'areaInSqM', value: 3000 }

最终我想将这些显示为表格。行是国家,列是属性。所以表格看起来像:

| country | population | areaInSqM |
| usa | 100 | 3000 |
| mexico | 200 | |

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

[ { country: 'usa', population: 100, areaInSqM: 3000 }, .... ] 

我目前的解决方案是一堆非 RxJS 对象,我在其中存储一个包含每个属性类型的集合,存储一个按国家/地区索引的查找对象,最后将查找对象转换回上述数组。我希望避免大量循环和双重存储。

RxJS 是否有任何运算符可以帮助进行此类操作?

有没有更聪明的方法?

在这种特殊情况下,假设是:

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

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

最佳答案

您的问题中有两个组成部分,数据结构部分和数据流部分(我想您将这些数据作为流获取,即一个一个地获取,这就是您使用 Rxjs 的原因)。

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

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$

这没有经过测试,如果有效请告诉我

关于javascript - RxJS 将属性从三元组组合到一个表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43332674/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com