Triez votre tableau, puis effectuez une recherche jusqu'à ce que vous trouviez une date plus tard qu'aujourd'hui. Vous pouvez également faire une recherche binaire, ou d'autres choses de fantaisie en fonction de la taille de votre tableau et de vos exigences de performance.
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;
}
}
Mise à jour
Les tableaux associatifs sont un peu plus compliqué. Vous pouvez trier les clés par dates, puis faire la même chose que ci-dessus, ou vous pouvez simplement en suivre une à la fois en suivant le plus petit offset positif d'aujourd'hui. Le premier est comme ceci:
// 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);
tri ajoute une certaine redondance comme une recherche de force brute va être O (n) et une sorte mieux cas va être O (n) ainsi. Donc, pour la recherche de force brute, juste:
// 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);
S'il vous plaît expliquer. – Stephen