按对象属性过滤可观察数组

时间:2016-11-29 20:03:11

标签: angular filter rxjs observable

我目前有一组可观察对象,我正在使用异步管道使用*ngFor循环进行迭代。 我想通过对象的属性值过滤observable,例如

原始阵列:

[{ name: test1,
   type: type1},
 { name: test2,
   type: type2}
 { name: test3,
   type: type1}
 { name: test4,
   type: type2}]

我想过滤这个并制作两个新的可观察(数组),一个用于type1,一个用于type2

我尝试了obs.filter(x => x.type == "type1),但没有返回任何内容

然后我尝试了obs.mergeAll().filter(x => x.type == "type1")并且我可以订阅并正确地将其记录到控制台,但现在它不能与我的*ngFor(异步管道)一起工作。我猜它是因为mergeAll意味着它不再是一个可观察的数组?所以我需要将其转换回来吗?

1 个答案:

答案 0 :(得分:0)

您可能缺少RXJS6中的管道运算符。

import { of, from } from "rxjs";

import { filter, map } from "rxjs/operators";

const obs = from([{
    name: 'test1',
    type: 'type1'
},
{
    name: 'test2',
    type: 'type2'
},
{
    name: 'test3',
    type: 'type1'
},
{
    name: 'test4',
    type: 'type2'
}]);

const source = obs.pipe(
    filter(data => data.type === 'type2')
)


console.log(source.subscribe(item => console.log(item)));
// prints {name: "test2", type: "type2"}
{name: "test4", type: "type2"}

如果要获取数组:


const items = [];
console.log(source.subscribe(item => items.push(item)));
console.log(items);