使用moment.js的Javascript对象键排序

麦戈维克9

我有以下对象结构

{ "Apr-18" : { ... },
  "Jan-18" : { ... },
  "Feb-18" : { ... },
  ...
}

我正在尝试对月份 (MMM-YY) 键进行排序,使其显示如下

{ "Jan-18" : { ... },
  "Feb-18" : { ... },
  "Apr-18" : { ... },
  ...
}

我的代码如下。我正在使用 moment.js 将日期转换为其纪元以进行排序比较。我大致遵循了此处显示的解决方案Sort JavaScript object by key但是它不起作用。

console.log 原样返回对象,没有进行排序。我错过了什么?

const object = { 
          "Apr-18" : { "a":"b" },
          "Jan-18" : { "c":"d" },
          "Feb-18" : { "e":"f" }
}

const sortObjectMonths = (obj) => Object.fromEntries(Object.entries(obj).sort( (a, b) => 
     Date.parse(moment(a, "MMM-YY") - Date.parse(moment(b, "MMM-YY")))
));

let sorted = sortObjectMonths(object)
console.log(sorted)

特里·伦诺克斯

您可以使用Object.entries()来获取对象属性键和值,然后使用Array.sort()moment 对它们进行排序。我们可以简单地减去矩值来对它们进行排序。

Array.sort()接受两个参数,firstEl,secondEl,在这种情况下,这将是[KEY1,值1],[KEY2,值2]。我们可以使用解构将它们写成 ([a,],[b,]),其中 a 和 b 是对象(例如 'Apr-18')。

然后我们将使用Object.fromEntries()来获取我们的排序对象。

const object = { 
    "Apr-18" : { "a":"b" },
    "Jan-18" : { "c":"d" },
    "Feb-18" : { "e":"f" },
}

console.log('Original object:', object)

const sortedObject = Object.fromEntries(
    Object.entries(object).sort(([a,],[b,]) => { 
         return moment(a, "MMM-YY") - moment(b, "MMM-YY");
    })
)
console.log('Sorted object:', sortedObject)
        
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.29.1/moment.min.js" referrerpolicy="no-referrer"></script>

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章