【问题标题】:Object.values messes up order of dates in JSObject.values 搞乱了 JS 中的日期顺序
【发布时间】:2020-09-13 12:24:14
【问题描述】:

我有问题。在对象上应用 Object.values() 时会破坏当前顺序,有什么想法可以保持顺序吗?

我有以下几点: console.log(formattedReads) 返回

{12: {…}, 18: {…}, 19: {…}, 20: {…}, 21: {…}, 26: {…}, 05: {…}, 06: {…}, 07: {…}, 08: {…}} // structure preview in console log, actual data below
05: {date: "05", goal_achieved: false, reads: 62, dayOfWeek: "Tuesday", nonFormattedDate: "2020-05-05"}
06: {date: "06", goal_achieved: false, reads: 15, dayOfWeek: "Wednesday", nonFormattedDate: "2020-05-06"}
07: {date: "07", goal_achieved: false, reads: 2, dayOfWeek: "Thursday", nonFormattedDate: "2020-05-07"}
08: {date: "08", goal_achieved: false, reads: 5, dayOfWeek: "Friday", nonFormattedDate: "2020-05-08"}
12: {date: "12", goal_achieved: false, reads: 10, dayOfWeek: "Tuesday", nonFormattedDate: "2020-05-12"}
18: {date: "18", goal_achieved: false, reads: 2, dayOfWeek: "Monday", nonFormattedDate: "2020-05-18"}
19: {date: "19", goal_achieved: true, reads: 0, dayOfWeek: "Tuesday", nonFormattedDate: "2020-05-19"}
20: {date: "20", goal_achieved: false, reads: 4, dayOfWeek: "Wednesday", nonFormattedDate: "2020-05-20"}
21: {date: "21", goal_achieved: false, reads: 1, dayOfWeek: "Thursday", nonFormattedDate: "2020-05-21"}
26: {date: "26", goal_achieved: false, reads: 0, dayOfWeek: "Tuesday"}
__proto__: Object

但是当我申请console.log(Object.values(formattedReadsByDay));

(10) [{…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}] // structure preview in console log, actual data below
0: {date: "12", goal_achieved: false, reads: 10, dayOfWeek: "Tuesday", nonFormattedDate: "2020-05-12"}
1: {date: "18", goal_achieved: false, reads: 2, dayOfWeek: "Monday", nonFormattedDate: "2020-05-18"}
2: {date: "19", goal_achieved: true, reads: 0, dayOfWeek: "Tuesday", nonFormattedDate: "2020-05-19"}
3: {date: "20", goal_achieved: false, reads: 4, dayOfWeek: "Wednesday", nonFormattedDate: "2020-05-20"}
4: {date: "21", goal_achieved: false, reads: 1, dayOfWeek: "Thursday", nonFormattedDate: "2020-05-21"}
5: {date: "26", goal_achieved: false, reads: 0, dayOfWeek: "Tuesday"}
6: {date: "05", goal_achieved: false, reads: 62, dayOfWeek: "Tuesday", nonFormattedDate: "2020-05-05"}
7: {date: "06", goal_achieved: false, reads: 15, dayOfWeek: "Wednesday", nonFormattedDate: "2020-05-06"}
8: {date: "07", goal_achieved: false, reads: 2, dayOfWeek: "Thursday", nonFormattedDate: "2020-05-07"}
9: {date: "08", goal_achieved: false, reads: 5, dayOfWeek: "Friday", nonFormattedDate: "2020-05-08"}
length: 10
__proto__: Array(0)

【问题讨论】:

  • 嗯,对象真的不是为了维持秩序。您可以根据日期对数组进行排序
  • 对象没有顺序。 “一个 ECMAScript 对象是一个无序的属性集合”。如果顺序很重要,您想使用数组。
  • Object.values 在我们使用数字键时返回一个使用数字顺序的数组。
  • 那么有什么办法可以保持实际订单吗?

标签: javascript arrays sorting object


【解决方案1】:

快速简单的方法是应用它,它会保持顺序。

Object.keys(formattedReadsByDay)
 .sort()
 .map(key => formattedReadsByDay[key])[0].nonFormattedDate,)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-04-14
    • 1970-01-01
    • 2022-12-28
    • 2020-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多