假设我有一个这样的数组:
[
{
name:"1",
args: [1,2,3,4,5]
},
{
name:"2",
args: [2,3,4,5,6]
}
]
我想要做的是删除所有具有值 我如何使用Observables(Rxjs)来做到这一点。我尝试使用mergeMap,但似乎确实做了我想做的事。[
{
name:"1",
args: [4,5]
},
{
name:"2",
args: [4,5,6]
}
]
答案 0 :(得分:3)
使用普通的JS,你可以很容易地做到这一点。
var data = [
{
name:"1",
args: [1,2,3,4,5]
},
{
name:"2",
args: [2,3,4,5,6]
}
];
var parsedData = data.map(function(el){
el.args = el.args.filter(function(x){ return x >= 4; });
return el;
});
console.log(parsedData);

答案 1 :(得分:1)
如果你想要RxJS-way解决方案,它可能看起来像这样:
ES6语法:
const arr = [
{
name:"1",
args: [1,2,3,4,5]
},
{
name:"2",
args: [2,3,4,5,6]
}
]
Rx.Observable
.from(arr) // 1
.map(item => { // 2
return {
...item,
args: item.args.filter(arg => arg >= 4) // 3
}
})
.reduce((acc, value) => [...acc, value], []) // 4
.subscribe(result => {
console.log(result) // 5
})
ES5语法:
var arr = [
{
name:"1",
args: [1,2,3,4,5]
},
{
name:"2",
args: [2,3,4,5,6]
}
]
Rx.Observable
.from(arr)
.map(function(item) {
return {
name: item.name,
args: item.args.filter(function(arg) {
return arg >= 4
})
}
})
.reduce(function(acc, value) {
return [].concat(acc, value)
}, [])
.subscribe(function(result) {
console.log(result)
})
args
过滤一些有用的链接:
答案 2 :(得分:0)
observable用于随时间对数据流进行操作,因此它们是数组,但它们不是数组。如果此数据来自可观察数据,则应该使用map,然后在可观察地图中使用普通数组运算符,因为您只是在操作流中的单个数据点:
source.map(data => data.map(d => Object.assign(d, {args:d.args.filter(v => v >= 4)})));