【问题标题】:RxJS5 - Operator to convert object map to arrayRxJS5 - 将对象映射转换为数组的运算符
【发布时间】:2017-06-11 10:51:50
【问题描述】:

我有一个服务,它返回一个对象映射,然后在 Angular 的 ngFor 中使用,它只接受数组。因此,我使用带有 lodash 的 _toArray 的 map 运算符将数据转换为数组。

虽然这可行,但我必须在需要执行此操作的任何地方导入 lodash,而且它看起来很脆弱。我打算研究创建一个自定义运算符,但也许有一个运算符已经这样做了?我似乎找不到合适的

数据:

{ 0 : {data : 'lorem'}, 1 : {data : 'lorem'}, 2 : {data : 'lorem'} }

当前:

this.http
    .get('/api')
    .map(data => _.toArray(data));

可能吗?

this.http
    .get('/api')
    .mapToArray();

【问题讨论】:

标签: angular rxjs5


【解决方案1】:

你应该能够使用 RxJS 的 map 运算符和 Object.keys() 方法来做你想做的事情。

Rx.Observable
  .of({
    0: { data : 'lorem' },
    1: { data : 'lorem' },
    2: { data : 'lorem' }
  })
  .map(data => Object.keys(data).map(k => data[k]))
  .subscribe(data => console.log(data));
<script src="https://npmcdn.com/@reactivex/rxjs@5.0.3/dist/global/Rx.min.js"></script>

【讨论】:

  • 这不一定会以正确的顺序输出元素的数组。
  • 我是否错过了操作员希望数组按特定顺序排列的位置?我回答相似但不同的原因正是出于这个原因。无需为不存在的规范编写代码。
  • 我不需要按顺序排列数组,这是一个很好的选择,这正是我所要求的。谢谢你
  • 保持属性的顺序很棘手,基本上,唯一有保证的方法是用预期的顺序定义一个不同的数组,然后重新排序你的结果,阅读更多here
猜你喜欢
  • 2019-05-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多