Sort array of objects with date field by date

后端 未结 5 791
猫巷女王i
猫巷女王i 2021-01-31 03:10

Give the following array of objects, I need to sort them by the date field ascending.

var myArray = [
  {
    name: \"Joe Blow\",
    date: \"Mon Oct 31 2016 00:         


        
相关标签:
5条回答
  • 2021-01-31 03:31

    just write _.sortBy({yourCollection}, {the field name});

    lodash will automatically figure that this is a date and it'll work like a magic!

    Awesome!

    0 讨论(0)
  • 2021-01-31 03:41

    Here's a solution using standard Javascript by converting both values to date object and comparing their value.

    myArray.sort((d1, d2) => new Date(d1.date).getTime() - new Date(d2.date).getTime());
    

    A complete snippet:

    var myArray = [
      {
        name: "Joe Blow",
        date: "Mon Oct 31 2016 00:00:00 GMT-0700 (PDT)"
      },
      {
        name: "Sam Snead",
        date: "Sun Oct 30 2016 00:00:00 GMT-0700 (PDT)"
      },
      {
        name: "John Smith",
        date: "Sat Oct 29 2016 00:00:00 GMT-0700 (PDT)"  
      }
    ];
    
    myArray.sort((d1, d2) => new Date(d1.date).getTime() - new Date(d2.date).getTime());
    
    console.log(myArray);

    0 讨论(0)
  • 2021-01-31 03:47

    You don't really need lodash. You can use JavaScript's Array.prototype.sort method.

    You'll need to create Date objects from your date strings before you can compare them.

    var myArray = [{
      name: "Joe Blow",
      date: "Mon Oct 31 2016 00:00:00 GMT-0700 (PDT)"
    }, {
      name: "Sam Snead",
      date: "Sun Oct 30 2016 00:00:00 GMT-0700 (PDT)"
    }, {
      name: "John Smith",
      date: "Sat Oct 29 2016 00:00:00 GMT-0700 (PDT)"
    }];
    
    myArray.sort(function compare(a, b) {
      var dateA = new Date(a.date);
      var dateB = new Date(b.date);
      return dateA - dateB;
    });
    
    console.log(myArray);

    0 讨论(0)
  • 2021-01-31 03:50

    If you are trying to use lodash to sort dates in ascending or descending order for your array of objects, you should use _.orderBy instead of _.sortBy

    https://lodash.com/docs/4.17.15#orderBy, this method allows specifying sort orders either by 'asc' or 'desc'

    An example would be:

    const sortedArray = _(myArray.orderBy([
          function(object) {
            return new Date(object.date);
          }],["desc"])
    
    0 讨论(0)
  • 2021-01-31 03:56

    Your date values are strings, so you need to use the new Date() constructor to change them to javascript date objects. This way you can sort them (using _.sortBy).

    var myArray = [
      {
        name: "Joe Blow",
        date: "Mon Oct 31 2016 00:00:00 GMT-0700 (PDT)"
      },
      {
        name: "Sam Snead",
        date: "Sun Oct 30 2016 00:00:00 GMT-0700 (PDT)"
      },
      {
        name: "John Smith",
        date: "Sat Oct 29 2016 00:00:00 GMT-0700 (PDT)"  
      }
    ];
    
    myArray = _.sortBy(myArray, function(dateObj) {
      return new Date(dateObj.date);
    });
    
    console.log(myArray)
    <script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.2/lodash.min.js"></script>

    0 讨论(0)
提交回复
热议问题