【问题标题】:javascript sort and sort equals on result. how? [duplicate]javascript排序和排序等于结果。如何? [复制]
【发布时间】:2013-08-31 14:34:04
【问题描述】:

我在排序结构为 {"name", "count"} 的对象时遇到问题:

1. name => "aaa", count => 1
2. name => "bbb", count => 2
3. name => "ccc", count => 3
4. name => "ddd", count => 1
5. name => "eee", count => 1

我需要按“计数”排序(从小到大,然后从大到小)。

我的排序功能:

mass.sort(compareElements);

function compareElements(a, b)
{
 if(a < b) return -1;
 else if(a > b) return 1;
 else return 0;
}

第一次调用(从小到大)我得到一个结果“res1”
在第二次通话(从大到小)我得到结果“res2”
在第三次通话(从小到大)我得到 'res3' !== 'res1' !!

res1 和 res3 中的元素顺序不一样。我需要它们是一样的。

【问题讨论】:

    标签: javascript sorting


    【解决方案1】:

    如果你的对象是这样的:

    var arrObj = {
       name: "aaa",
       count: 1
    };
    

    使用此功能进行比较:

    function compareElements(a, b)
    {
      return a.count - b.count;
    }
    

    【讨论】:

      【解决方案2】:

      为了让您对stable 进行排序,您需要按索引比较“相等”的项目:

      // mass = [{name:…, count:…}, {name:…, count:…}, …]
      for (var i=0; i<mass.length; i++)
          mass[i].index = i;
      mass.sort(function(a, b) {
          return compareElements(a, b) || a.index - b.index;
      });
      function compareElements(a, b) {
          // something
          return a.count - b.count;
      }
      

      【讨论】:

      • mass.sort((a, b) => { return a.count.toString().localeCompare(b.count.toString()) }) 是不是简单多了?跨度>
      • @VimalMahi 不,这是完全不同的事情——而且不稳定
      • 好的。我会更深入地挖掘
      猜你喜欢
      • 1970-01-01
      • 2018-12-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多