【发布时间】:2020-01-07 03:04:05
【问题描述】:
我通常在使用带有嵌套对象或数组的 rxjs 时遇到问题。 我目前的用例是这样的:
{a: [
{b: 0, c:[{d:1}]},
{b: 1, e:[{f: 'someString'}]}
]
任务:获取和设置a、b、c、d、e、f的Observable或值。我还希望能够订阅每个属性。
我在一个带有 BehaviorSubjects 数组的类似用例中遇到了这个问题: Efficiently get Observable of an array BehaviorSubjects
在 rxjs 中使用嵌套数组/对象的基本功能时,我通常会遇到问题。
我指的基本功能包括:
数组:
- 按索引获取元素
- 在数组上使用 for of/in
- 按索引设置元素
- 推送、弹出、移位、切片、拼接……
对象:
- 按属性名称获取值
- 进入嵌套树:object.key1.key2.key3[3].key4 ...
- 按属性名称设置值
- 分配
- for of/in 循环
一般:
- 解构:例如:
let [variable1, variable2] = someObject; - 也许我忘记了其他东西。
我不知道哪些函数对于哪些 rxjs 对象是可行的,哪些是有意义的(例如,您应该能够直接在 Observable 中设置值)。但是来自没有 rxjs 的背景,我很难正确管理我的 rxjs 对象。 我认为除了我缺乏知识和理解之外的原因是,
一个。 rxjs 对象不提供我习惯的普通数组和对象的功能。例如:
let variable1 = array[1].property;
//becomes this (see related stack-Question I mentioned earlier)
let variable2 = array.pipe(mergeMap(d=> d[index].pipe(map(d1 => d1[property]));
// -> what happens here? You first need to know what mergeMap,
// map is doing and you have 5 levels of nested inline functions.
b.为了实现那些提到的功能,我需要检查 .pipe() 函数并使用一些函数,如 mergeMap、map、pluck ......这些函数并不直接表明你可以获得让我们说'e'的 Observable在我的例子中。使 object.a[1].e 之类的东西难以实现(至少我还不知道该怎么做)
编辑: 我还想指出,我仍然喜欢 rxjs 的想法,它在 Angular 中运行良好。我只是在完全使用它时遇到了问题,因为我对 angular 和 rxjs 有点陌生。
【问题讨论】: