当前位置 : 首页 » 互动问答 » 正文

按对象值排序对象的字典

分类 : 互动问答 | 发布时间 : 2018-04-27 15:06:17 | 评论 : 2 | 浏览 : 21 | 喜欢 : 0

如果我有这样的JavaScript对象:

 list = {
    约翰: {
        DOB:'2017-02-01'
    },
    Rob:{
        生日:'2016-07-09'
    },
}

我该如何将这个对象排序到按其DOB排序的对象列表中。我已经安装了lodash,所以使用它是一个选项。

我希望结果是可映射的,即一个数组,例如:

 sorted_keys = ['Rob','John']

or

 sorted_array = [
    {
        Rob:{
            生日:'2016-07-09'
        }
    },
    {
        约翰: {
            DOB:'2017-02-01'
        }
    },
]

回答(2)

  • 1楼
  • var list = {
        约翰: {
            DOB:'2017-02-01'
        },
        Rob:{
            生日:'2016-07-09'
        }
    }
    
    var sortedKeys = Object.keys(list).sort(function(a,b){
      返回新的日期(列表[a] .DOB) - 新的日期(列表[b] .DOB)
    })
    
    console.log(sortedKeys)

    或使用箭头函数:

     let list = {
        约翰: {
            DOB:'2017-02-01'
        },
        Rob:{
            生日:'2016-07-09'
        }
    }
    
    let sortedKeys = Object.keys(list).sort((a,b)=> new Date(list [a] .DOB) -  new Date(list [b] .DOB))
    
    console.log(sortedKeys)

    如果有字符串,回应你的评论:

     let list = {
        约翰: {
            出生日期:'bbb'
        },
        Rob:{
            出生日期:'aaa'
        }
    }
    
    let sortedKeys = Object.keys(list).sort((a,b)=> {
        if(list [a] .DOB <list [b] .DOB)return -1;
        if(list [a] .DOB> list [b] .DOB)return 1;
        返回0;
    })
    
    执行console.log(又如sortedKeys)

  • 2楼
  • 首先,请注意,有一个名为list的对象,它不是一个列表,而是一个对象。

    可以按照以下步骤对此对象中的键值对进行排序:<notranslate >使用

    • Object.keys 提取键,按照
    • 值的字母顺序对键进行排序。幸运的是,您可以使用 localeCompare 比较YYYY-MM-DD格式的日期。将已排序的键映射到所需最终结构的对象 list [key] .DOB
    • let sorted = Object.keys(list)   .sort((a,b)=> list [a] .DOB.localeCompare(list [b] .DOB))   .map(k => {return {[k]:list [k]}}));

    Like this:

     [
      {
        “Rob”:{
          “DOB”:“2016-07-09”
        }
      },
      {
        “约翰”: {
          “DOB”:“2017-02-01”
        }
      }
    ]

    Result:

    [
      {
        "Rob": {
          "DOB": "2016-07-09"
        }
      },
      {
        "John": {
          "DOB": "2017-02-01"
        }
      }
    ]
    

相关阅读: