过滤角度为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); }
}