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

按对象值排序对象字典[重复]

  •  0
  • JayBee  · 技术社区  · 7 年前

    如果我有这样一个JavaScript对象:

    list = {
        John: {
            DOB: '2017-02-01'
        },
        Rob: {
            DOB: '2016-07-09'
        },
    }
    

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

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

    sorted_keys = ['Rob','John']
    

    sorted_array = [
        {
            Rob: {
                DOB: '2016-07-09'   
            }
        },
        {
            John: {
                DOB: '2017-02-01'   
            }
        },
    ]
    
    2 回复  |  直到 7 年前
        1
  •  4
  •   Mikhail Katrin    7 年前

    var list = {
        John: {
            DOB: '2017-02-01'
        },
        Rob: {
            DOB: '2016-07-09'
        }
    }
    
    var sortedKeys = Object.keys(list).sort(function(a, b) {
      return new Date(list[a].DOB) - new Date(list[b].DOB)
    })
    
    console.log(sortedKeys)

    或使用箭头功能:

    let list = {
        John: {
            DOB: '2017-02-01'
        },
        Rob: {
            DOB: '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 = {
        John: {
            DOB: 'bbb'
        },
        Rob: {
            DOB: '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;
        return 0;
    })
    
    console.log(sortedKeys)
        2
  •  1
  •   janos slartidan    7 年前

    首先,请注意,有一个名为 list 这不是一个列表,而是一个对象。

    可以通过以下步骤对该对象中的键值对进行排序:

    • 使用提取键 Object.keys
    • 按字母顺序对键排序 list[key].DOB 价值观幸运的是,你可以使用 localeCompare 比较YYYY-MM-DD格式的日期。
    • 将排序的键映射到所需最终结构的对象

    这样地:

    let sorted = Object.keys(list)
      .sort((a, b) => list[a].DOB.localeCompare(list[b].DOB))
      .map(k => { return { [k]: list[k] } }));
    

    结果:

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