如何解决如何对ISO 8601持续时间进行排序
如何对ISO 8601持续时间进行排序示例:在JavaScript中两次相同时间之间的“ P1DT02H26M”,
我只是尝试过这种方式。
var asc = true
document.getElementById('durationSort').addEventListener('click',function(){
if(asc){
modifiedData.data.offers.sort(function(a,b) {
var c = a.slices[0].duration,d = b.slices[0].duration;
return c-d;
})
asc = false
offers(modifiedData)
document.getElementById('durationarrow').innerHTML = '<i class="fas fa-hand-point-down" style="color:#01b1ef;"></i>'
document.getElementById('arrivalarrow').innerHTML = null
document.getElementById('depaturearrow').innerHTML = null
document.getElementById('pricearrow').innerHTML = null
}else{
var list1 = modifiedData.data.offers
list1.sort(function(a,b){
var c = a.slices[0].duration,d = b.slices[0].duration;
return c-d;
})
modifiedData.data.offers = list1.reverse()
asc = true
offers(modifiedData)
document.getElementById('durationarrow').innerHTML = '<i class="fas fa-hand-point-up" style="color:#01b1ef;"></i>'
document.getElementById('arrivalarrow').innerHTML = null
document.getElementById('depaturearrow').innerHTML = null
document.getElementById('pricearrow').innerHTML = null
}
});
解决方法
Moment.js包含parse ISO8601 durations的功能。
一旦有了这个,就可以很容易地对持续时间列表进行排序,我们可以简单地从一个持续时间减去另一个持续时间,以毫秒为单位。
let durations = [{minute: 5,day: 1},{ hour: 10 },{ day: 1,hour: 2,minute: 26 },{ second: 3 },{ day: 20 }].map(d => moment.duration(d).toISOString());
function sortDurations(durations) {
return [...durations].sort( (a,b) => {
return moment.duration(a) - moment.duration(b);
})
}
console.log("Unsorted durations:",durations);
console.log("Sorted durations:",sortDurations(durations));
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.27.0/moment.min.js" integrity="sha512-rmZcZsyhe0/MAjquhTgiUcb4d9knaFc7b5xAfju483gbEXTkeJRUMIPk6s3ySZMYUHEcjKbjLjyddGWMrNEvZg==" crossorigin="anonymous"></script>
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。