David M.
David M.

Reputation: 21

Trimming a date in an object from an array and sorting the array by most recent date

I have an array of objects and I need to trim the created_at value and return the full array of objects descending by most recent created_at value.

I can perform the sort as desired but my code only returns the create_at value, not the entire object in that sorted order

How do I alter the map function so that I don't isolate the created_at value?

var notes = [
    {
        country: "Angola",
        denomination: 50,
        currency: "Kwanzas",
        issue_date: 2012,
        created_at: "2017-07-20T18:41:15.000Z",
        updated_at: "2019-07-20T18:41:15.000Z"
    },
    {
        country: "Rwanda",
        denomination: 5000,
        currency: "Francs",
        issue_date: 2009,
        created_at: "2008-07-20T18:41:15.000Z",
        updated_at: "2019-07-20T18:41:15.000Z"
    },
    {
        country: "Serbia",
        denomination: 50,
        currency: "Dinara",
        issue_date: 2011,
        created_at: "2015-07-20T18:41:15.000Z",
        updated_at: "2019-07-20T18:41:15.000Z"
    },
    {
        country: "Moldova",
        denomination: 20,
        currency: "Lei",
        issue_date: 2013,
        created_at: "2009-07-20T18:41:15.000Z",
        updated_at: "2019-07-20T18:41:15.000Z"
    },
    {
        country: "Liberia",
        denomination: 10,
        currency: "Dollars",
        issue_date: 2010,
        created_at: "1998-07-20T18:41:15.000Z",
        updated_at: "2019-07-20T18:41:15.000Z"
    },
    {
        country: "Kazakhstan",
        denomination: 500,
        currency: "Tenge",
        issue_date: 2019,
        created_at: "2001-07-20T18:41:15.000Z",
        updated_at: "2019-07-20T18:41:15.000Z"
    }
]

var dateMap = notes.map(note => note.created_at.substring(0,10)).sort().reverse()

The correct result would be:

dateMap = [
    {
        country: "Angola",
        denomination: 50,
        currency: "Kwanzas",
        issue_date: 2012,
        created_at: "2017-07-20T18:41:15.000Z",
        updated_at: "2019-07-20T18:41:15.000Z"
    },
    {
        country: "Serbia",
        denomination: 50,
        currency: "Dinara",
        issue_date: 2011,
        created_at: "2015-07-20T18:41:15.000Z",
        updated_at: "2019-07-20T18:41:15.000Z"
    },
    {
        country: "Moldova",
        denomination: 20,
        currency: "Lei",
        issue_date: 2013,
        created_at: "2009-07-20T18:41:15.000Z",
        updated_at: "2019-07-20T18:41:15.000Z"
    },
    {
        country: "Rwanda",
        denomination: 5000,
        currency: "Francs",
        issue_date: 2009,
        created_at: "2008-07-20T18:41:15.000Z",
        updated_at: "2019-07-20T18:41:15.000Z"
    },
    {
        country: "Kazakhstan",
        denomination: 500,
        currency: "Tenge",
        issue_date: 2019,
        created_at: "2001-07-20T18:41:15.000Z",
        updated_at: "2019-07-20T18:41:15.000Z"
    },
    {
        country: "Liberia",
        denomination: 10,
        currency: "Dollars",
        issue_date: 2010,
        created_at: "1998-07-20T18:41:15.000Z",
        updated_at: "2019-07-20T18:41:15.000Z"
    },

]

Upvotes: 0

Views: 49

Answers (2)

charlietfl
charlietfl

Reputation: 171669

Seems all you are needing is a sort which you can do by comparing the property values in sort function

notes.sort((a, b) => b.created_at.localeCompare(a.created_at))

console.log(notes)
<script>
  var notes = [{
      country: "Angola",
      denomination: 50,
      currency: "Kwanzas",
      issue_date: 2012,
      created_at: "2017-07-20T18:41:15.000Z",
      updated_at: "2019-07-20T18:41:15.000Z"
    },
    {
      country: "Rwanda",
      denomination: 5000,
      currency: "Francs",
      issue_date: 2009,
      created_at: "2008-07-20T18:41:15.000Z",
      updated_at: "2019-07-20T18:41:15.000Z"
    },
    {
      country: "Serbia",
      denomination: 50,
      currency: "Dinara",
      issue_date: 2011,
      created_at: "2015-07-20T18:41:15.000Z",
      updated_at: "2019-07-20T18:41:15.000Z"
    },
    {
      country: "Moldova",
      denomination: 20,
      currency: "Lei",
      issue_date: 2013,
      created_at: "2009-07-20T18:41:15.000Z",
      updated_at: "2019-07-20T18:41:15.000Z"
    },
    {
      country: "Liberia",
      denomination: 10,
      currency: "Dollars",
      issue_date: 2010,
      created_at: "1998-07-20T18:41:15.000Z",
      updated_at: "2019-07-20T18:41:15.000Z"
    },
    {
      country: "Kazakhstan",
      denomination: 500,
      currency: "Tenge",
      issue_date: 2019,
      created_at: "2001-07-20T18:41:15.000Z",
      updated_at: "2019-07-20T18:41:15.000Z"
    }
  ]
</script>

Upvotes: 0

Jonas Wilms
Jonas Wilms

Reputation: 138267

Provide your own comparator:

  const byDate = note => note.created_at.substring(0,10);

  notes.sort((a, b) => byDate(b).localeCompare(byDate(a)));

Upvotes: 0

Related Questions