Sort array of objects by single key with date value

后端 未结 19 1595
情话喂你
情话喂你 2020-11-22 10:56

I have an array of objects with several key value pairs, and I need to sort them based on \'updated_at\':

[
    {
        \"updated_at\" : \"2012-01-01T06:25         


        
19条回答
  •  悲&欢浪女
    2020-11-22 11:53

    With this we can pass a key function to use for the sorting

    Array.prototype.sortBy = function(key_func, reverse=false){
        return this.sort( (a, b) => {
            var keyA = key_func(a),
                keyB = key_func(b);
            if(keyA < keyB) return reverse? 1: -1;
            if(keyA > keyB) return reverse? -1: 1;
            return 0;
        }); 
    }
    

    Then for example if we have

    var arr = [ {date: "01/12/00", balls: {red: "a8",  blue: 10}},
                {date: "12/13/05", balls: {red: "d6" , blue: 11}},
                {date: "03/02/04", balls: {red: "c4" , blue: 15}} ]
    

    We can do

    arr.sortBy(el => el.balls.red)
    /* would result in
    [ {date: "01/12/00", balls: {red: "a8", blue: 10}},
      {date: "03/02/04", balls: {red: "c4", blue: 15}},
      {date: "12/13/05", balls: {red: "d6", blue: 11}} ]
    */
    

    or

    arr.sortBy(el => new Date(el.date), true)   // second argument to reverse it
    /* would result in
    [ {date: "12/13/05", balls: {red: "d6", blue:11}},
      {date: "03/02/04", balls: {red: "c4", blue:15}},
      {date: "01/12/00", balls: {red: "a8", blue:10}} ]
    */
    

    or

    arr.sortBy(el => el.balls.blue + parseInt(el.balls.red[1]))
    /* would result in
    [ {date: "12/13/05", balls: {red: "d6", blue:11}},    // red + blue= 17
      {date: "01/12/00", balls: {red: "a8", blue:10}},    // red + blue= 18
      {date: "03/02/04", balls: {red: "c4", blue:15}} ]   // red + blue= 19
    */
    

提交回复
热议问题