如何解决在Observable中将对象内部的数组的先前值和新值连接起来
我有一个对象,其中包含一系列项目,例如:{ a: string,b: string,items: Something[] }
。
以我的观察,当发出新值时,我希望将项目的先前值与新值连接起来,所以我使用了scan operator。它的作用类似于myObservable$.pipe(scan((acc: any,curr: any) => [...acc.items,...curr.items]))
。
它按预期方式工作,但是我有一些类似于(myObservable$ | async)?.a
的管道异步操作,因此我想保持我的对象不变,并且仅将我的项目连接到该对象中,但是扫描运算符将我的对象映射到新数组(我完全理解这是正常行为)。
那么,如何在没有此映射的情况下将数组连接到对象中?
示例:
我所拥有的:
{
a: 'first',b: 'first',items: [{
c: 'bla',d: 'bla'
},{
c: 'blabla',d: 'blabla'
}]
}
和
{
a: 'second',b: 'second',items: [{
c: 'second bla',d: 'second bla'
}]
}
我想要什么:
{
a: 'second',d: 'blabla'
},{
c: 'second bla',d: 'second bla'
}]
}
解决方法
将当前项目连接到累计项目,并将其分配给当前项目。
返回当前对象。
scan((acc: any,curr: any) => (curr.items = acc.items.concat(curr.items),curr))
或者不更改对象
scan((acc: any,curr: any) => ({ ...curr,items: [ ...acc.items,...curr.items ] }))
,
尝试一下:
object.items = [ ...object.items,...new ]
,
尝试一下。
var object1 = {
a: 'first',b: 'first',items: [{
c: 'bla',d: 'bla'
},{
c: 'blabla',d: 'blabla'
}]
};
var object2 = {
a: 'second',b: 'second',items: [{
c: 'second bla',d: 'second bla'
}]
};
object2.items = [...object1.items,...object2.items]
console.log(object2);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。