【问题标题】:combining array objects into single object将数组对象组合成单个对象
【发布时间】:2016-08-10 14:22:51
【问题描述】:

使用 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: ''}
]

我想简单地映射它,只保留名称和图块。像这样的事情也是如此

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}]

【问题讨论】:

  • 预期输出是什么?
  • 添加了预期的输出
  • Map 将返回一个数组,所以基本上你的具有 3 个道具的对象数组变成了一个具有 2 个道具的对象数组。如果您想要单个对象作为输出,您正在寻找 reduce 而不是 map。

标签: javascript rxjs5


【解决方案1】:

你可以简单地拥有:

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

【讨论】:

    【解决方案2】:

    创建一个新数组。使用forEach数组方法从旧数组中获取项目

    var newArray = [];
    data.forEach(function(item){
     newArray.push({
      name:item.name,
      title:item.title
    })
    
    })
    
    console.log(newArray)
    

    JSFIDDLE

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-21
      • 1970-01-01
      • 1970-01-01
      • 2022-11-08
      相关资源
      最近更新 更多