Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/369.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/32.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 过滤角度为6的数据_Javascript_Angular - Fatal编程技术网

Javascript 过滤角度为6的数据

Javascript 过滤角度为6的数据,javascript,angular,Javascript,Angular,我在纽约6号。我目前正在从事angular 6项目。我遇到了这样一种情况:我需要对数据进行归档,但我无法保留原始对象。以下是代码: this.loginService.categoryType$.subscribe((data) => { for(var i=0; i<this.listPosts.length; i++){ if(this.listPosts[i]['categoryName'] == data){ }else{

我在纽约6号。我目前正在从事angular 6项目。我遇到了这样一种情况:我需要对数据进行归档,但我无法保留原始对象。以下是代码:

    this.loginService.categoryType$.subscribe((data) => {
     for(var i=0; i<this.listPosts.length; i++){
       if(this.listPosts[i]['categoryName'] == data){

       }else{
         this.listPosts.splice(i,1);
       }

     }

   });
this.loginService.categoryType$.subscribe((数据)=>{

对于(var i=0;i如果您需要保留原始列表和过滤列表,我建议您将原始列表保存在变量中,然后使用rxjs方法显示过滤后的列表

originalList$: BehaviorSubject<any> = new BehaviorSubject<any>([]);
filteredList = [];

this.loginService.categoryType$.subscribe((data) => {
    this.originalList$.next(data);
});

this.originalList$.pipe(
map(data => yourLogicToFilter(data))
).subscribe(list => filteredList = list);
originalList$:BehaviorSubject=新的BehaviorSubject([]);
filteredList=[];
this.loginService.categoryType$.subscribe((数据)=>{
this.originalList$.next(数据);
});
这个.originalList$.pipe(
映射(数据=>yourLogicToFilter(数据))
).subscribe(list=>filteredList=list);
filteredList可以是可观察的,因此您也可以在代码中使用异步管道


也许有更干净的解决方案包含rxjs,但至少这应该让你继续逻辑

从我的理解来看,你想要获得数据,你不想改变存储在组件中的原始对象作为属性。在这种情况下,使用拼接会破坏你尝试做的事情的目的,因为它会发生变化这就是目标

有很多方法可以做到这一点,但我会尽量让我的答案尽可能接近你的代码。如果我错了,请纠正我,但在我的理解中,
this.loginService.categoryType$
是一个可观察的或用于确定类别类型的主题。既然你已经将类别类型作为可观察的,你可以使用map然后根据类别名称筛选
this.listPosts

    const listPosts$ = this.loginService.categoryType$.pipe(
       map(categoryType => this.listPosts.filter(
           listPost => listPost.categoryName === categoryType
       )),
    );
您可以在模板上使用
listPosts$
,并在其上使用管道异步。
listPosts$| async

或者您可以点击或订阅它,就像您获取值并将其分配给组件属性或变量那样。我个人不喜欢这种方法,因为您将流中的值存储在变量中

    const listPosts$ = this.loginService.categoryType$.pipe(
       map(categoryType => this.listPosts.filter(
           listPost => listPost.categoryName === categoryType
       )),
    );

    listPosts$.subscribe(currentList => this.currentListPosts = currentList);

希望这能有所帮助!

为什么没有两个变量:data和dataFiltered?,dataFiltered=value?data.filter(x=>x.property==value):data
    const listPosts$ = this.loginService.categoryType$.pipe(
       map(categoryType => this.listPosts.filter(
           listPost => listPost.categoryName === categoryType
       )),
    );

    listPosts$.subscribe(currentList => this.currentListPosts = currentList);