gpt4 book ai didi

javascript - 根据日期键对javascript对象进行排序

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:22:56 25 4
gpt4 key购买 nike

我有一个如下所示的 JavaScript 对象

testObj = {
1/10/2015: {},
2/10/2015: {},
3/10/2015: {},
4/10/2015: {},
29/09/2015: {},
30/09/2015: {}
}

现在,我正在尝试对其进行排序,使日期按日期升序排列。为此,我做了以下事情

const orderedDates = {};
Object.keys(testObj).sort(function(a, b) {
return moment(moment(b, 'DD/MM/YYYY') - moment(a, 'DD/MM/YYYY')).format('DD/MM/YYYY');
}).forEach(function(key) {
orderedDates[key] = testObj[key];
})
rangeObj = orderedDates;

然而,这根本不是对日期进行排序。它仍然返回与 testObj 完全相同的对象。如何根据日期键对对象进行排序?

最佳答案

此行返回一个字符串:

moment(moment(b, 'DD/MM/YYYY') - moment(a, 'DD/MM/YYYY')).format('DD/MM/YYYY')

但是sort方法需要一个整数 值,因此您需要比较实际日期:

Object.keys(testObj).sort(function(a, b) {
return moment(b, 'DD/MM/YYYY').toDate() - moment(a, 'DD/MM/YYYY').toDate();
}).forEach(function(key) {
orderedDates[key] = testObj[key];
})

但是您需要注意,在 ES5 中,规范不保证对象中键的顺序 - 尽管大多数浏览器确实按插入顺序迭代键。然而,在 ES6 中,你可以保证如果你迭代你的对象键,它们将是有序的。

因此 console.log(orderedDates) 可能不会按您预期的顺序显示键,但是 Object.keys(orderedDates).forEach(function(date) { console.log(date ); }); 将按预期工作。

var testObj = {
"1/10/2015": {},
"2/10/2015": {},
"3/10/2015": {},
"4/10/2015": {},
"29/09/2015": {},
"30/09/2015": {}
};
var orderedDates = {};
Object.keys(testObj).sort(function(a, b) {
return moment(b, 'DD/MM/YYYY').toDate() - moment(a, 'DD/MM/YYYY').toDate();
}).forEach(function(key) {
orderedDates[key] = testObj[key];
})
Object.keys(orderedDates).forEach(function(date) {
document.body.innerHTML += date + "<br />"
});
<script src="http://momentjs.com/downloads/moment.js"></script>

关于javascript - 根据日期键对javascript对象进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32392157/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com