Javascript Firebase Angular-按值对我的用户进行排序-排序不是函数
我使用的是firebase和Angular,以下是我的用户数据库: 我想按“ptsTotal”对我的用户进行排序 我有一个users.service,它有一个函数getUsersByPoints。但当我使用它时,控制台会返回给我: this.users.sort不是一个函数 我不知道我在哪里犯了错误。你能帮我找出错误,或者给我另一个解决方案来分类我的用户吗 非常感谢Javascript Firebase Angular-按值对我的用户进行排序-排序不是函数,javascript,angular,firebase,firebase-realtime-database,Javascript,Angular,Firebase,Firebase Realtime Database,我使用的是firebase和Angular,以下是我的用户数据库: 我想按“ptsTotal”对我的用户进行排序 我有一个users.service,它有一个函数getUsersByPoints。但当我使用它时,控制台会返回给我: this.users.sort不是一个函数 我不知道我在哪里犯了错误。你能帮我找出错误,或者给我另一个解决方案来分类我的用户吗 非常感谢 import { Injectable } from '@angular/core'; import {User} from '
import { Injectable } from '@angular/core';
import {User} from '../models/user.model';
import {Subject} from 'rxjs/Subject';
import * as firebase from 'firebase';
@Injectable({
providedIn: 'root'
})
export class UsersService {
users: User[] = [];
usersSubject = new Subject<User[]>();
constructor() { }
emitUsers(){
this.usersSubject.next(this.users);
}
saveUsers(){
firebase.database().ref('/users').set(this.users);
}
getUsers(){
firebase.database().ref('/users')
.on('value',(data)=>{
this.users = data.val() ? data.val() : [];
this.users.sort((a,b)=>a.ptsTotal-b.ptsTotal);
this.emitUsers();
});
}
从'@angular/core'导入{Injectable};
从“../models/User.model”导入{User};
从'rxjs/Subject'导入{Subject};
从“firebase”导入*作为firebase;
@注射的({
providedIn:'根'
})
导出类用户服务{
用户:用户[]=[];
UsersObject=新主题();
构造函数(){}
用户(){
this.usersObject.next(this.users);
}
saveUsers(){
firebase.database().ref('/users').set(this.users);
}
getUsers(){
firebase.database().ref(“/users”)
.on('值',(数据)=>{
this.users=data.val()?data.val():[];
this.users.sort((a,b)=>a.ptsTotal-b.ptsTotal);
这个.emitUsers();
});
}
data.val()
不是数组。它将是一个属性与用户下的子键同名的对象(例如“-M9YJ…”)。这些属性将进一步包含每个子项下的数据
如果您需要按子值排序,Realtime Database实际上可以使用中所述的orderByChild()
为您进行排序。您不需要在客户端中进行排序
如果您仍然希望在客户端进行排序,则必须以某种方式将排序应用于该新数组。看起来firebase正在将其更改为一个对象,因此其原型将不再包含排序。您好@Doug。谢谢,我几乎可以肯定orderByChild是一个很好的使用方法。但我的id似乎是“M9YJ…”这是一个问题。当我做orderByChild('ptsTotal')时,它不起作用。就像我希望所有用户建立一个排名一样,我不能做orderByChild('Id/ptsTotal')。解决方案是什么?