Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/31.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 Firebase Angular-按值对我的用户进行排序-排序不是函数_Javascript_Angular_Firebase_Firebase Realtime Database - Fatal编程技术网

Javascript Firebase Angular-按值对我的用户进行排序-排序不是函数

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 '

我使用的是firebase和Angular,以下是我的用户数据库:

我想按“ptsTotal”对我的用户进行排序

我有一个users.service,它有一个函数getUsersByPoints。但当我使用它时,控制台会返回给我: this.users.sort不是一个函数

我不知道我在哪里犯了错误。你能帮我找出错误,或者给我另一个解决方案来分类我的用户吗

非常感谢

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')。解决方案是什么?