代码之家  ›  专栏  ›  技术社区  ›  Simon

按2个变量排序优先级为1

  •  0
  • Simon  · 技术社区  · 6 年前

    我有一张清单 posts .这些帖子有日期( created )还有一个分数( score )。我想做的是按 创建 分数 但是有 分数 作为更重要的变量。

    换句话说,按以下顺序对所有文章进行排序 创建 但是拥有最高的 分数 先显示..

    所以本质上:

    score: 6, created: july 1 //created is actually a timestamp 1530372915676
    score: 4, created: july 1
    score: 2, created: july 1
    score: 1, created: july 1
    score: 5, created: june 30
    score: 3, created: june 30
    

    我发现了这段代码:

    array.sort(function (x, y) { return x.created - y.created || x.score - y.score; });
    

    但它似乎不起作用。

    最好的方法是什么?

    2 回复  |  直到 6 年前
        1
  •  2
  •   Amit Chigadani    6 年前

    这可以满足你的要求。它将首先排序 created descending 创建 score descending(highest score first) .类似于SQL查询 order by created desc, score desc

    arr.sort(function (x, y) { 
           if(x.created != y.created) 
           { 
                 return y.created - x.created 
           } 
           else return y.score-x.score
    });
    

    这也应该有效,不用 if

    arr.sort(function (x, y) { return y.created - x.created || y.score - x.score; });
    
        2
  •  0
  •   Leonid Pyrlia    6 年前

    x y

    array.sort(function (x, y) { return x.created - y.created || y.score - x.score; });