Angular 将数组拆分为可观察值<;任何[]>;到更小的块

Angular 将数组拆分为可观察值<;任何[]>;到更小的块,angular,rxjs,Angular,Rxjs,我花了几个小时在一系列可观察的对象上复制一个过程,但我没有任何运气来完成它 想象一下,我们有一个像这样的大阵列作为一个可观测的: [ {name: "you1", id: 32}, {name: "you2", id: 12}, {name: "you3", id: 22}, {name: "you4", id: 54}, {name: "you", id: 09}, {name: "you", id: 43}, .... ] 您要将它们按3个数组进行分组

我花了几个小时在一系列可观察的对象上复制一个过程,但我没有任何运气来完成它

想象一下,我们有一个像这样的大阵列作为一个可观测的:

[ 
  {name: "you1", id: 32}, 
  {name: "you2", id: 12}, 
  {name: "you3", id: 22},
  {name: "you4", id: 54}, 
  {name: "you", id: 09},
  {name: "you", id: 43}, 
  ....
]
您要将它们按3个数组进行分组,每个数组有2项,如下所示:

[ 
  [{name: "you1", id: 32}, {name: "you2", id: 12}], 
  [{name: "you3", id: 22}, {name: "you4", id: 54}], 
  [{name: "you", id: 09}, {name: "you", id: 43}], 
  ....
]
这个范围是动态的,我们需要进行一些计算,并将可观测值转换为这种形式。好吧,我用Javascript很容易做到,但我不知道如何用RXJS做到。有什么帮助吗

这是如何在JS中完成的:

let positionArray,
positionItem=0;
const totalArray=this.groupedBySize>0?Math.floor(大小(this.SelectedWorkspace)/this.groupedBySize):0;
this.selectedGroupedWorkspace=[];
对于(positionArray=0;positionArray
这只不过是阵列上的一个缩减:

const data=new rxjs.BehaviorSubject([
{姓名:“you1”,id:32},
{姓名:“you2”,id:12},
{姓名:“you3”,id:22},
{姓名:“you4”,id:54},
{姓名:“你”,身份证号码:09},
{姓名:“你”,身份证号码:43},
]);
const group=data.pipe(rxjs.operators.map)(arr=>arr.reduce((p,n)=>{
常数last=p[0];
如果(最后长度<3)最后推(n);
否则p.unshift([n]);
返回p;
},[[]].reverse());
subscribe(d=>console.log(d))

你到底想完成什么?你需要单独的观测值吗?或者?嘿@Brandon不,我想转换当前的可观测值。我不知道这是否是一个好的方法,但我做了一件事,得到了observable的值,做了这个操作,然后用of(array[])再次放弃它,它就工作了。但我并不满意。一定是一个更好的方法,不能回答我的问题。你想实现什么?也许使用rxjs分区@Brandon it即将解决CDK虚拟卷轴中的一个问题,该卷轴需要垂直/水平显示为网格列表。问题是CDK VS不支持混合定向。我们的想法是计算每一行可以容纳多少个项目,因此我们为每一行创建一个项目数组,每一行将被定义为VS中的一个滚动项目,这样它就可以很好地工作,正如您所看到的,
reduce
甚至比JS函数更简单。至于可观察到的,唯一要做的就是将原始的流映射到你想要的流,不多不少。@arya我已经更新了我的答案,请看第二个片段!