javascript - 将数组对象合并为单个对象

标签 javascript rxjs5

使用 Rxjs 5.0,我有一个像这样的对象

var data = [
    {name: 'abc', title: 'zzz', data: '', id: ''},
    {name: 'abc1', title: 'zzz1', data: '', id: ''},
    {name: 'abc2', title: 'zzz2', data: '', id: ''},
    {name: 'abc3', title: 'zzz3', data: '', id: ''}
]

我想简单地映射它,只保留名称和图 block 。所以做了这样的事情

Rx.Observable.from(data)
    .map(item => return {name: item.name, title: item.title};)
    .subscribe(items => console.log('Final OBJ:' + JSON.stringify(items)));

在控制台上,我在多行上获取项目,即订阅运行了 4 次。我只想使用一个完整的对象运行订阅一次,该对象仅包含名称和标题字段的数据。

控制台上的预期输出是:

Final OBJ: [{name: 'abc', title: zzz},{name: 'abc1', title: zzz1},{name: 'abc2', title: zzz2},{name: 'abc3', title: zzz3}]

最佳答案

您可以简单地拥有:

Rx.Observable.from(data)
  .reduce((arr, item, idx, source) => {
    arr.push({
      name: item.name,
      title: item.title
    });
    return arr;
  }, [])
  .subscribe(items => console.log(JSON.stringify(items)));

JS Bin example

编辑:看来 combineAll应该可以解决问题。

Rx.Observable.from(data)
  .map(item => {
    return Rx.Observable.of({
      name: item.name,
      title: item.title
    });
  })
  .combineAll()
  .subscribe(items => console.log(JSON.stringify(items)));

JS Bin Example

关于javascript - 将数组对象合并为单个对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38876124/

相关文章:

javascript - AngularJS ng-下拉树结构的模型定义

javascript - 使用 html+css+javascript 或 JSP 作为我的表示层

javascript - 以随机间隔将 HTML 元素放置在 5 个页面之一上? JavaScript、jQuery、MySQL 或 PHP

javascript - 冷热可观察量 : are there 'hot' and 'cold' operators?

angular - 在 HTTP 超时时保持订阅 RXJS 主题

javascript - 如何在 Javascript 中使用 for 调用动态命名方法

javascript - 无法获取单选按钮的值

javascript - 如何使用 RxJS 从 arrayBuffer 中拆分数据帧?

typescript - Angular 2 RC4 RxJS 崩溃

angular - 暂停和恢复可观察流,请提出更好的选择