打字稿数组排序的工作方式

时间:2017-02-01 14:27:42

标签: arrays sorting typescript

我想对对象数组进行排序。我的对象中有日期我想对对象的日期进行排序

 sortFunction(data: Array<any>, propertyRetriever: Function, direction : number) {
    data.sort((a, b) => {
        console.log('a : ' + a.id);
        console.log('b : ' + b.id);
        a = propertyRetriever(a);
        b = propertyRetriever(b);
        // We handle undefined value as they are lower than everything else.
        // ex : undefined < 'hello'
       if ((!a && !b) || a === b ) {
             return 0;
       }
       else if (!a) {
           return -1 * direction;
       }
       else if (!b) {
           return 1 * direction;
       }
       else if (a > b) {
            return 1 * direction;
       } else {
            return -1 * direction;
       }
    });

propertyRetriever是调用sortFunction

时给出的函数
   this._sorter.sortFunction(
        myArray,
        t => t[this.sortField],
        this.sortDirection);
  }

我用相同的数组调用两次这个sortFunction,我有diffrents结果。 我不明白为什么

有人会说他随机进行比较。

我认为它会开始比较第一个和第二个,但不是,如果我在第一次迭代时将断点放在“a = propertyRetriever(a)”上并且我显示a和b,它们每次执行都不同

为例 我有obj的数组

obj1 = 
    id: 1
    creationDate : Mon Jan 30 2017 01:00:00 GMT+0100 (Romance Standard Time)
    name :albert
obj2 = 
    id: 2
    creationDate : Mon Jan 23 2017 01:00:00 GMT+0100 (Romance Standard Time)
    name :jules
obj3 = 
    id: 3
    creationDate : Mon Jan 05 2016 01:00:00 GMT+0100 (Romance Standard Time)
    name :jules   
.....
obj2000 = 
    id: 2000
    creationDate : Mon Apr 04 2016 01:00:00 GMT+0100 (Romance Standard Time)
    name :jules

第一次执行排序时:在控制台

    a: 10
    b: 12
    a: 11
    b: 45

第二次

    a: 21
    b: 14
    a: 10
    b: 13

0 个答案:

没有答案