Javascript 给定日期字符串的关联数组,查找下一个最近的日期
给定一个日期字符串的关联数组,如何在今天或之后查找下一个最近的日期 更新:如果这是一个关联数组呢?如何返回最近日期的密钥?Javascript 给定日期字符串的关联数组,查找下一个最近的日期,javascript,arrays,date,Javascript,Arrays,Date,给定一个日期字符串的关联数组,如何在今天或之后查找下一个最近的日期 更新:如果这是一个关联数组呢?如何返回最近日期的密钥? var matchdays = {}; 7386: "09/14/2010" 7387: "09/29/2010" 7388: "10/20/2010" 7389: "11/02/2010" 7390: "11/24/2010" 7391: "12/07/2010" 7392: "12/18/2010" 例如,我希望它返回7392,因为12/18在今天(12/14)或之
var matchdays = {};
7386: "09/14/2010"
7387: "09/29/2010"
7388: "10/20/2010"
7389: "11/02/2010"
7390: "11/24/2010"
7391: "12/07/2010"
7392: "12/18/2010"
例如,我希望它返回7392,因为12/18在今天(12/14)或之后。对数组排序,然后搜索,直到找到比今天晚的日期。您还可以根据阵列的大小和性能要求执行二进制搜索或其他奇特的操作
var today = new Date();
dateList.sort();
var nextLater = null;
for (var i = 0; i < dateList.length; i++) {
if (dateList[i] > today) {
nextLater = dateList[i];
break;
}
}
var today=新日期();
dateList.sort();
var nextLater=null;
对于(var i=0;i今天){
nextLater=日期列表[i];
打破
}
}
更新
关联数组有点棘手。您可以按日期对关键点进行排序,然后执行与上面相同的操作,或者只需一次通过一个关键点,跟踪从今天开始的最小正偏移量。前者是这样的:
// Function to get the keys
function keys(obj) {
var keys = [];
for (var key in obj) {
keys.push(key);
}
return keys;
}
// Get the keys, then sort the keys by there associated date
var keys = keys(matchdays).sort(function(a, b) {
var d1 = new Date(matchdays[a]);
var d2 = new Date(matchdays[b]);
return d1 - d2;
});
// Iterate through the keys, finding the key associated with the next date after today
var today = new Date();
var nextLater = null;
for (var i = 0; i < keys.length; i++) {
var date = new Date(matchdays[keys[i]]);
if (date > today) {
nextLater = keys[i];
break;
}
}
alert(nextLater);
//获取密钥的函数
功能键(obj){
var键=[];
for(obj中的var键){
按键。按(键);
}
返回键;
}
//获取密钥,然后按相关日期对密钥进行排序
var keys=keys(匹配日).排序(函数a,b){
var d1=新日期(匹配日[a]);
var d2=新日期(匹配日[b]);
返回d1-d2;
});
//遍历键,查找与今天之后的下一个日期关联的键
var today=新日期();
var nextLater=null;
对于(变量i=0;i今天){
nextLater=键[i];
打破
}
}
警报(nextLater);
排序增加了一些冗余,因为蛮力搜索将是O(n),而最佳情况排序也将是O(n)。因此,要进行暴力搜索,只需:
// Function to get the keys
function keys(obj) {
var keys = [];
for (var key in obj) {
keys.push(key);
}
return keys;
}
// Get the keys
var keys = keys(matchdays);
// Iterate through the keys, finding the key associated with the next date after today
var today = new Date();
var nextLater = null;
var min;
for (var i = 0; i < keys.length; i++) {
var date = new Date(matchdays[keys[i]]);
var diff = date - today;
if (diff > 0 && (min == undefined || diff < min ) {
min = diff
nextLater = keys[i];
}
}
alert(nextLater);
//获取密钥的函数
功能键(obj){
var键=[];
for(obj中的var键){
按键。按(键);
}
返回键;
}
//拿到钥匙
var密钥=密钥(匹配日);
//遍历键,查找与今天之后的下一个日期关联的键
var today=新日期();
var nextLater=null;
var-min;
对于(变量i=0;i0&(最小值==未定义的差值<最小值){
最小值=差值
nextLater=键[i];
}
}
警报(nextLater);
抱歉-我更新了我的问题,以反映我对使用关联数组感兴趣