简体   繁体   中英

Return the latest date from array of dates

I have json as follow:

  "reviews":[
    {
    "notes": "Great place, perfect location but the best part was the Staff. Thank you so much for making our trip so wonderful!",
    "date": "2015-04-18",
    "rating":{"overall": 100}
    },
    {
    "notes": "I messed up the days I was supposed to be there but they did everything they could to get me a room, which I did. The guy at the front was super nice and then drew me an entire map based off of how much time I had there in Rome. It was extremely helpful and the restaurant he recommends (a friends who you get 10% off of) had good lasagna. Great place for a really reasonable price. Also, the doors do not automatically lock for you room, so just remember to lock your door when you leave. ",
    "date": "2016-04-18",
    "rating":{"overall": 94}
    }
    ]

I am trying to get the latest date (most recent) so that I can print the associated "notes".

      function highestReview() {
        var maxNumb = [];
        for(var y = 0; y < data.reviews.length; y++){
          maxNumb.push(data.reviews[y].date);
        }
       var latestDate = new Date(Math.max.apply(null, maxNumb));
        console.log(latestDate);

      }
      highestReview();

I am getting "invalid date"

As per the docs , If at least one of arguments cannot be converted to a number , the result is NaN And new Date(NaN) will be Invalid Date

Wrap the date string in new Date while pushing in array. When DateObject is passed through Number , numeric value representing date will be returned.

 var data = { "reviews": [{ "notes": "Great place, perfect location but the best part was the Staff. Thank you so much for making our trip so wonderful!", "date": "2015-04-18", "rating": { "overall": 100 } }, { "notes": "I messed up the days I was supposed to be there but they did everything they could to get me a room, which I did. The guy at the front was super nice and then drew me an entire map based off of how much time I had there in Rome. It was extremely helpful and the restaurant he recommends (a friends who you get 10% off of) had good lasagna. Great place for a really reasonable price. Also, the doors do not automatically lock for you room, so just remember to lock your door when you leave. ", "date": "2016-04-18", "rating": { "overall": 94 } }] }; function highestReview() { var maxNumb = []; for (var y = 0; y < data.reviews.length; y++) { maxNumb.push(new Date(data.reviews[y].date)); } var latestDate = new Date(Math.max.apply(null, maxNumb)); console.log(latestDate); } highestReview(); 

You could use Array#reduce and compare the date as string, while it is an ISO date .

 var data = { "reviews": [{ "notes": "Great place, perfect location but the best part was the Staff. Thank you so much for making our trip so wonderful!", "date": "2015-04-18", "rating": { "overall": 100 } }, { "notes": "I messed up the days I was supposed to be there but they did everything they could to get me a room, which I did. The guy at the front was super nice and then drew me an entire map based off of how much time I had there in Rome. It was extremely helpful and the restaurant he recommends (a friends who you get 10% off of) had good lasagna. Great place for a really reasonable price. Also, the doors do not automatically lock for you room, so just remember to lock your door when you leave. ", "date": "2016-04-18", "rating": { "overall": 94 } }] }, latestDate = data.reviews.reduce(function (r, a, i) { return !i || a.date > r ? a.date : r; }, undefined); document.write('<pre>' + JSON.stringify(latestDate, 0, 4) + '</pre>'); 

You must convert your date values to Date objects first:

function highestReview() {
        var maxNumb = [];
        for(var y = 0; y < data.reviews.length; y++){
          maxNumb.push(new Date(data.reviews[y].date));
        }
       var latestDate = new Date(Math.max.apply(null, maxNumb));
        console.log(latestDate);

      }
      highestReview();

Hope it helps

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM