使用Lodash和Typescript排序数字

时间:2016-11-08 20:23:13

标签: angular typescript lodash

我有一个有角度的2服务apptService,返回Observable<Appointment[]>然后我使用lodash sortBy函数订购:

class Appointment {
    id: string;
    distance: number;
    appointmentDate: date;
}

getAppointments(sortOrder) {
   this.appointments = this
     .apptService
     .getAppointments()
     .map(v => _.sortBy(v, sortOrder));
}

我调用getAppointments传递类似的排序函数:

getAppointments((app: Appointment) => app.id);
getAppointments((app: Appointment) => app.distance);
getAppointments((app: Appointment) => app.appointmentDate);

appointmentDateid排序符合预期,但按distance排序时,值按字母顺序排序,即:12,123,15,3

目前,我使用以下方法提出了难看的解决方案:

 getAppointments((app: Appointment) => {
   // this will only work for appointments up to 100000 miles away
   var s = "00000" + app.distance.toString();
   return s.substr(s.length - 5);
 });

但这打破了我的模式,所以我正在寻找更好的解决方案,或者希望至少理解为什么会发生这种情况。

lodash用于排序,因为我喜欢语法和传递排序箭头功能的简易性,但如果有更好的解决方案,我不会使用它。

抱歉,但没有笨蛋,我无法在那里得到lodash和打字稿。

1 个答案:

答案 0 :(得分:1)

在我的服务中,我有这个:

    let appointments = this
        .http
        .get("app/appointments.json")
        .map((r: Response) => r.json().appointments as Appointment[]);

虽然每个json对象都被转换为Appointment[],但看起来这可能仅仅是为了获得直线效益?并且不会发生实际的转换。属性设置为字符串,而不考虑类属性类型。

进行以下更改解决了这个问题。

let appointments = this
    .http
    .get("app/appointments.json")
    .map(this.mapAppointments);

private mapAppointments(response: Response): Appointment[] {
    return response.json().appointments.map((r) => {
        let g = new Appointment();
        g.id = r.id;
        g.appointmentDate = r.appointmentDate;
        g.distance = parseInt(r.distance);
        return g;
    });
}

感谢@Polochon和@Meir带领我这一点。