我有以下对象结构
{ "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] 删除。
我来说两句