arrays - 将 Object.assign 与 Observable 数组一起使用

标签 arrays rxjs

我使用 Object.assign 向 Observable 数组的每个元素添加一个属性

努力找出正确的运算符来向数组的每个对象添加属性。例如,在本例中,姓名字段不适用于成绩。

示例:

let x = Observable.of({id: 1, name: first grader}, {id: 2, name: second grader})

// current solution using flatmap and then re-configuring as array
x
.flatMap( res => res.map( student => Object.assign({}, student, {grade: student.name})))
.toArray()

上面的示例有效,但看起来很奇怪......因为我正在平面映射然后重新构建数组。有没有更好的运算符(operator)/方法来减少步骤?

如果我只在初始可观察值上使用 Object.assign 我会得到: 对象{0:对象,1:对象},它是对象的对象,而不是对象的数组。

最佳答案

The above example works, but seems strange...as I'm flatmapping and then re-constituting the array. Is there a better operator/ approach to reduce the steps?

如果您的数据已经作为数组提供,那么您可以自己改变整个数组:

Rx.Observable.of([{id: 1, name: 'first grader'}, {id: 2, name: 'second grader'}])
  .map(students => {
    // note - this map below is Array.prototype.map, not Rx
    return students.map(student => Object.assign({}, student, {grade: student.name}));
  })
  .subscribe(x => console.log(x));

但是当您的数据被异步接收时,Rx 才真正大放异彩:

Rx.Observable.from([{id: 1, name: 'first grader'}, {id: 2, name: 'second grader'}]) /* stream of future student data elements */
  .map(student => Object.assign({}, student, {grade: student.name}))
  .toArray() // combine your complete stream when completed into a single array emission
  .subscribe(x => console.log(x));

toArray() 是一个实用函数,用于等待完成,然后返回数组内的所有发出的元素作为第一次(也是最后一次)发出。

关于arrays - 将 Object.assign 与 Observable 数组一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41371072/

相关文章:

python - 将 bytearray 从 VARBINARY(16) 列转换为 IP 地址

arrays - 有效地合并两个数组 - 一个已排序,另一个未排序

angular - Rxjs 6 : using catchError() gives You provided 'undefined' where a stream was expected. 您可以提供一个 Observable、Promise、Array 或 Iterable

functional-programming - RxJs 运算符 groupBy 会泄漏内存吗?

angular - 将 observable 运行到 zone.js 中

javascript - 如何根据键将对象数组拆分为不同的对象

Python3如何为数组中4个单词后的每个元素添加<br>标签?

javascript - 在 Angular 和 rxjs 映射函数中使用类型断言

javascript - 如何按顺序执行一组 Observable,仅在前一个 Observable 完成后才执行下一个?

ios - 在将项目附加到数组之前从数组中读取(崩溃)