过滤角度为5+的JSON;带着疑问

过滤角度为5+的JSON;带着疑问,json,angular,rxjs,Json,Angular,Rxjs,我有一个关于显示我的结果的问题,因为我一直抱怨它不是数组。我试图转换为数组,但没有任何帮助 我的代码: searchQuery: any = { user: {active: true}, cities: ['e991a8ee-e182-4ef7-82e2-142a3da4aec9', '2c01ea98-b545-4271-a69b-201962e4fb2f'], ageGroup: ['3c7baa61-1e69-4c9b-9525-516c20cd4f56','56aa97f1-e51e-

我有一个关于显示我的结果的问题,因为我一直抱怨它不是数组。我试图转换为数组,但没有任何帮助

我的代码:

searchQuery: any = {
user: {active: true},
cities: ['e991a8ee-e182-4ef7-82e2-142a3da4aec9', '2c01ea98-b545-4271-a69b-201962e4fb2f'],
ageGroup: ['3c7baa61-1e69-4c9b-9525-516c20cd4f56','56aa97f1-e51e-4347-8378-42569417c5a5'],
transportType: 0,
gender: 'c7122a10-d776-4789-859e-54b93fc26801'};
如果未选择任何内容,或者如果我们希望搜索transportType而不是搜索查询包含transportType,则搜索查询可以为空。但是如果我们想搜索的话,可以有更多的项目。 我们从服务器接收到一个包含大量对象的json数组。(+/-15000个对象)

目标是将de-searchQuery与来自服务器的json进行匹配。因此,可以实现多种结果。 在本例中,我们希望所有活跃的用户都能通过uuid和2个年龄组等匹配所有城市。。。(一切都必须匹配) 在我的代码中,查询、服务器响应和过滤器结果作为一个服务在Angular中是可观察的

@Injectable() export class SearchService {

  private searchQueryInit: any = {
    user: {active: true},
    cities: ['e991a8ee-e182-4ef7-82e2-142a3da4aec9', '2c01ea98-b545-4271-a69b-201962e4fb2f'],
    ageGroup: ['3c7baa61-1e69-4c9b-9525-516c20cd4f56','56aa97f1-e51e-4347-8378-42569417c5a5'],
    transportType: 0,
    gender: 'c7122a10-d776-4789-859e-54b93fc26801'   };

  private query: BehaviorSubject<any> = new BehaviorSubject<any>(searchQueryInit);   private query$: Observable<any>;   readonly result$: Observable<any>;   private entities$: Observable<any>;

  constructor(private store: Store<fromStore.AppState>) {
    store.dispatch(new storeActions.LoadEntities()); // call the store 
    this.entities$ = this.store.select(fromStore.getAllEntities); // load the entities
    this.query$ = this.query.asObservable().debounceTime(200);
    this.result$ = this.searchEntities();   }

  searchEntities(): Observable<any> {
     return this.query$.switchMap(
       (query) => {
         console.log(query);
         return entities$.pipe(
           mergeMap( (y: any) => y),
           filter((t: any) => t.transportType === 2), // refactor to multiple search items
        );
      }
     );   }

  get entities(): Observable<any> {
    return this.result$;   }

  set searchQuery(search: {field, query}) {
    // field: string, query: string
    const v = this.query.getValue();
    const next = (search.query) ? {...v, [search.field]: search.query} : {...v, [search.field]: null};
    this.query.next(next);   }

}
@Injectable()导出类SearchService{
private searchQueryInit:any={
用户:{active:true},
城市:['e991a8ee-e182-4ef7-82e2-142a3da4aec9','2c01ea98-b545-4271-a69b-201962e4fb2f'],
年龄组:['3c7baa61-1e69-4c9b-9525-516c20cd4f56','56aa97f1-e51e-4347-8378-42569417c5a5'],
传输类型:0,
性别:'c7122a10-d776-4789-859e-54b93fc26801';
私有查询:BehaviorSubject=新的BehaviorSubject(searchQueryInit);私有查询$:可观察;只读结果$:可观察;私有实体$:可观察;
构造函数(私有存储:存储){
dispatch(newstoreactions.LoadEntities());//调用存储
this.entities$=this.store.select(fromStore.getAllenties);//加载实体
this.query$=this.query.asObservable().debounceTime(200);
this.result$=this.searchEntities();}
searchEntities():可观察{
返回此.query$.switchMap(
(查询)=>{
console.log(查询);
返回实体$.pipe(
合并映射((y:any)=>y),
筛选器((t:any)=>t.transportType==2),//重构为多个搜索项
);
}
);   }
获取实体():可观察{
返回此.result$;}
设置searchQuery(搜索:{field,query}){
//字段:字符串,查询:字符串
const v=this.query.getValue();
const next=(search.query){…v[search.field]:search.query}:{…v[search.field]:null};
this.query.next(next);}
}
searchQuery在本例中没有用处,但我把它放在这里,让您了解如何构建查询

可能整个设置都不正确,所以欢迎提供任何建议。
谢谢大家!

我解决了这个问题,对一个可观察对象进行迭代不是一个好主意,所以我只是作为一个普通数组进行过滤,这就解决了我的问题。

那么,当它抱怨它不是数组时,你想迭代什么?你在ngFor中使用哪些文件?谢谢大家的帮助和时间
@Injectable() export class SearchService {

  private searchQueryInit: any = {
    user: {active: true},
    cities: ['e991a8ee-e182-4ef7-82e2-142a3da4aec9', '2c01ea98-b545-4271-a69b-201962e4fb2f'],
    ageGroup: ['3c7baa61-1e69-4c9b-9525-516c20cd4f56','56aa97f1-e51e-4347-8378-42569417c5a5'],
    transportType: 0,
    gender: 'c7122a10-d776-4789-859e-54b93fc26801'   };

  private query: BehaviorSubject<any> = new BehaviorSubject<any>(searchQueryInit);   private query$: Observable<any>;   readonly result$: Observable<any>;   private entities$: Observable<any>;

  constructor(private store: Store<fromStore.AppState>) {
    store.dispatch(new storeActions.LoadEntities()); // call the store 
    this.entities$ = this.store.select(fromStore.getAllEntities); // load the entities
    this.query$ = this.query.asObservable().debounceTime(200);
    this.result$ = this.searchEntities();   }

  searchEntities(): Observable<any> {
     return this.query$.switchMap(
       (query) => {
         console.log(query);
         return entities$.pipe(
           mergeMap( (y: any) => y),
           filter((t: any) => t.transportType === 2), // refactor to multiple search items
        );
      }
     );   }

  get entities(): Observable<any> {
    return this.result$;   }

  set searchQuery(search: {field, query}) {
    // field: string, query: string
    const v = this.query.getValue();
    const next = (search.query) ? {...v, [search.field]: search.query} : {...v, [search.field]: null};
    this.query.next(next);   }

}