【问题标题】:Sorting dictionary of objects by object value [duplicate]按对象值排序对象字典[重复]
【发布时间】:2017-11-24 19:45:33
【问题描述】:

如果我有这样的 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'   
        }
    },
]

【问题讨论】:

标签: javascript sorting object lodash


【解决方案1】:

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)

【讨论】:

  • 如果它们不是日期 - 只是字符串怎么办?
  • @user1637466 又添加了一个 sn-p
【解决方案2】:

首先,请注意,您有一个名为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"
    }
  }
]

【讨论】:

  • 名称和内容仅用于演示目的 - 这不是我的实际对象。
  • @user1637466 将相同的逻辑应用于您的真实姓名和内容,所演示的技术也同样有效。
猜你喜欢
  • 2010-11-15
  • 1970-01-01
  • 2021-04-23
  • 2021-10-15
  • 2022-01-19
  • 2012-01-17
  • 1970-01-01
  • 2021-01-17
相关资源
最近更新 更多