0
votes

Trouver la moindre heure de la date de max en utilisant le format AAAA-MM-DD

Comment puis-je obtenir la date la moins et maximale dans un tableau avec le format AAAA-MM-DD? Voici un échantillon de mes valeurs de date.

p>

const data = [{
  "date": "2012-10-21",
  "value": 60
}, {
  "date": "2012-10-22",
  "value": 61
}, {
  "date": "2012-10-23",
  "value": 69
}, {
  "date": "2012-10-24",
  "value": 67
}]
   
console.log(data);


0 commentaires

5 Réponses :


2
votes

Vous pouvez utiliser Réduire strong> et date.parse strong>

p>

const data = [{"date": "2012-10-21","value": 60}, {  "date": "2012-10-22","value": 61}, {"date": "2012-10-23","value": 69}, {"date": "2012-10-24","value": 67}]
   
let maxDate = data.reduce((op,inp)=>{
  if(Date.parse(inp.date) > Date.parse(op.max)){
    op.max = inp.date
  }
  if(Date.parse(inp.date) < Date.parse(op.max)){
    op.least = inp.date
  }
  return op
},{least:data[0].date,max:data[0].date})


console.log(maxDate)


0 commentaires

1
votes

Vous pouvez réduire les données et prendre juste une comparaison de chaîne.

p>

const
    data = [{ date: "2012-10-21", value: 60 }, { date: "2012-10-22", value: 61 }, { date: "2012-10-23", value: 69 }, { date: "2012-10-24", value: 67 }],
    result = data.reduce((r, { date }) => {
        if (!r) return { min: date, max: date };
        if (r.min > date) r.min = date;
        if (r.max < date) r.max = date;
        return r;
    }, undefined);

console.log(result);


0 commentaires

2
votes

Si vous voulez juste que les dates, vous pouvez utiliser math.min code> et math.max code> Si vous mapper votre matrice sur des dates en utilisant .map code> :

p>

const data = [{
  "date": "2012-10-21",
  "value": 60
}, {
  "date": "2012-10-22",
  "value": 61
}, {
  "date": "2012-10-23",
  "value": 69
}, {
  "date": "2012-10-24",
  "value": 67
}];


const dates = data.map(({date}) => new Date(date));
const sortedDates = dates.sort((a, b) => a - b);

const minDate = sortedDates[0];
const maxDate = sortedDates[sortedDates.length-1];

console.log("min", minDate.toISOString().slice(0,10));
console.log("max", maxDate.toISOString().slice(0,10));


3 commentaires

Non, il a une mauvaise o de O (nlogn) avec le tri vs O (n) en prenant une seule boucle.


Oui, pour de grands ensembles de données, envisagez une autre approche qui éliminera le facteur logn


Je crois que le premier extrait devrait être O (n) (mais avec plusieurs itérations - peut toujours être améliorée)



1
votes

S'il s'agit du format de date utilisé, un simple .sort () code> à la date de date fonctionnera. La date la plus ancienne est le premier élément de la matrice et la dernière date du dernier élément.

Ceci est le gros avantage d'utiliser un format de date (comme la norme ISO) où la storage lexicale de la valeur de chaîne est identique au tri logique. par date. p>

p>

const data = [{
  "date": "2012-10-21",
  "value": 60
}, {
  "date": "2012-10-22",
  "value": 61
}, {
  "date": "2012-10-23",
  "value": 69
}, {
  "date": "2012-10-24",
  "value": 67
}, {
  "date": "2012-10-22",
  "value": 102
}];

const sorted_by_date = data.sort(( a, b ) => a.date.localeCompare( b.date ));

const earliest_date = sorted_by_date[ 0 ];

const latest_date = sorted_by_date[ sorted_by_date.length - 1 ];

console.log( earliest_date );

console.log( latest_date );


0 commentaires

0
votes
function checkDate(data,condition){
    if(condition == 'max'){
        var max = 0
        data.map((item)=>{
            if(new Date(item.date)>max){
                max = new Date(item.date)
            }
        })
        return max;
    }else if(condition == 'least'){
        var least = new Date()
        data.map((item)=>{
            if(new Date(item.date)<least){
                least = new Date(item.date)
            }
        })
        return least;
    }
}

0 commentaires