Сортируйте ваш массив, а затем ищите, пока не найдете дату позже, чем сегодня. Вы также можете выполнить бинарный поиск или другие интересные вещи в зависимости от размера вашего массива и ваших требований к производительности.
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;
}
}
Обновление
Ассоциативные массивы немного сложнее. Вы можете отсортировать ключи по датам, а затем сделать то же, что и выше, или вы можете просто пройти по одному за раз, отслеживая наименьшее положительное смещение по сравнению с сегодняшним днем. Бывший так:
// 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);
Сортировка добавляет некоторую избыточность, поскольку поиск методом грубой силы будет 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);