【问题标题】:Javascript how to sort array of objects by numeric value of the string [duplicate]Javascript如何按字符串的数值对对象数组进行排序[重复]
【发布时间】:2018-11-20 10:53:32
【问题描述】:

下面是我的对象数组的示例,我应该按名称对它们进行排序。 js正常排序排序如下图,不过我的目标是按数值排序,例如:“1 ex, 2 ex, 3 ex, 4 ex, 11 ex ..”。有人可以帮我实现这一目标吗?

[{id: 588, name: "1 ex"}
{id: 592, name: "11 ex"}
{id: 607, name: "2 ex"}
{id: 580, name: "3 ex"}
{id: 596, name: "4 ex"}]

【问题讨论】:

标签: javascript sorting underscore.js collator


【解决方案1】:

您必须在比较函数中包含解析函数,如下所示:

var compare = function(a, b) {
  return parseInt(a.name) - parseInt(b.name);
}

console.log(x.sort(compare));

【讨论】:

    【解决方案2】:

    使用parseInt() 将数字部分拆分并转换为整数,然后您可以使用这些值对记录进行排序:

    var arr = [{id: 588, name: "1 ex"},
    {id: 592, name: "11 ex"},
    {id: 607, name: "2 ex"},
    {id: 580, name: "3 ex"},
    {id: 596, name: "4 ex"}];
    
    arr.sort(function (a, b) {
      var aNum = parseInt(a.name);
      var bNum = parseInt(b.name);
      return aNum - bNum;
    });
    
    console.log(arr);

    【讨论】:

      【解决方案3】:

      @user2004082,你也可以试试下面的代码来得到你想要的。

      通过http://rextester.com/GUPBC15345在线试用。

      var arr = [{id: 588, name: "1 ex"},
      {id: 592, name: "11 ex"},
      {id: 607, name: "2 ex"},
      {id: 580, name: "3 ex"},
      {id: 596, name: "4 ex"}];
      
      var map = {}
      for(var item of arr) {
          map[item["name"]] = item;   
      }
      
      var arr = arr.map(function(item){return item["name"]}).sort(function(a, b){
          var a = parseInt(a.split(' ')[0]);
          var b = parseInt(b.split(' ')[0]);
      
          return a-b;
      }).map(function(name){
          return map[name];
      })
      
      console.log(arr);
      

      » 输出

      [ { id: 588, name: '1 ex' },
        { id: 607, name: '2 ex' },
        { id: 580, name: '3 ex' },
        { id: 596, name: '4 ex' },
        { id: 592, name: '11 ex' } ]
      

      【讨论】:

        【解决方案4】:

            arr = [{id: 588, name: "1 ex"},
            {id: 592, name: "11 ex"},
            {id: 607, name: "2 ex"},
            {id: 580, name: "3 ex"},
            {id: 596, name: "4 ex"}]
            
            result = arr.sort(function(a, b) { return parseInt(a.name) > parseInt(b.name) })
            console.log(result)

        【讨论】:

          【解决方案5】:

          尝试关注

          let arr = [{id: 588, name: "1 ex"},
          {id: 592, name: "11 ex"},
          {id: 607, name: "2 ex"},
          {id: 580, name: "3 ex"},
          {id: 596, name: "4 ex"}];
          
          arr.sort((a,b) => a.name.split(" ")[0] - b.name.split(" ")[0]);
          
          console.log(arr);

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2018-02-06
            • 2014-07-10
            • 2019-11-24
            • 1970-01-01
            • 1970-01-01
            • 2017-07-13
            • 2021-07-13
            • 2016-10-08
            相关资源
            最近更新 更多