1

I have an array from the api response and its objects.I need to find the value which has maximum total and I have display it I'm unable to solve it , when there are two max values of the total.Is there any solution?

myArray[
{time: "2018-12-02", total: 25, percentage: 20, averageTime: 20},
{time: "2018-13-02", total: 25, percentage: 20, averageTime: 20},
{time: "2018-14-02", total: 35, percentage: 25, averageTime: 25},
{time: "2018-16-02", total: 65, percentage: 60, averageTime: 20},
{time: "2018-17-02", total: 40, percentage: 20, averageTime: 20},
{time: "2018-18-02", total: 65, percentage: 20, averageTime: 20},
{time: "2018-18-02", total: 35, percentage: 23, averageTime: 20}
];

I tried reduce function like this:

var data =[];
data.reduce((max, p) => p.total > max ? p.total : max, data[0].total);
Aydin4ik
  • 1,782
  • 1
  • 14
  • 19
Hema Nandagopal
  • 668
  • 12
  • 35

4 Answers4

2

You can do something like this:

Idea:

  • Create a hashMap with total as keys and a variable to hold max value.
  • Check if the key exists and if not, initialize it to an array.
  • Push current object in this array.
  • Fetch the array with the key as max and you will get all the values with max total.

Now that you have entire object, you can iterate and display any necessary values.

var myArray = [{time: "2018-12-02", total: 25, percentage: 20, averageTime: 20},
{time: "2018-13-02", total: 25, percentage: 20, averageTime: 20},
{time: "2018-14-02", total: 35, percentage: 25, averageTime: 25},
{time: "2018-16-02", total: 65, percentage: 60, averageTime: 20},
{time: "2018-17-02", total: 40, percentage: 20, averageTime: 20},
{time: "2018-18-02", total: 65, percentage: 20, averageTime: 20},
{time: "2018-18-02", total: 35, percentage: 23, averageTime: 20}]

var max = 0;
var hashMap = myArray.reduce((acc, p) => {
  max = Math.max(max, p.total);
  acc[p.total] = acc[p.total] || [];
  acc[p.total].push(p);
  return acc;
}, {});

console.log(hashMap[max]);

With only time value

var myArray = [{time: "2018-12-02", total: 25, percentage: 20, averageTime: 20},
{time: "2018-13-02", total: 25, percentage: 20, averageTime: 20},
{time: "2018-14-02", total: 35, percentage: 25, averageTime: 25},
{time: "2018-16-02", total: 65, percentage: 60, averageTime: 20},
{time: "2018-17-02", total: 40, percentage: 20, averageTime: 20},
{time: "2018-18-02", total: 65, percentage: 20, averageTime: 20},
{time: "2018-18-02", total: 35, percentage: 23, averageTime: 20}]

var max = 0;
var hashMap = myArray.reduce((acc, p) => {
  max = Math.max(max, p.total);
  acc[p.total] = acc[p.total] || [];
  acc[p.total].push(p.time);
  return acc;
}, {});

console.log(hashMap[max]);
Community
  • 1
  • 1
Rajesh
  • 24,354
  • 5
  • 48
  • 79
1

You can use Math.max along with spread and array.prototype.map:

var myArray = [
{time: "2018-12-02", total: 25, percentage: 20, averageTime: 20},
{time: "2018-13-02", total: 25, percentage: 20, averageTime: 20},
{time: "2018-14-02", total: 35, percentage: 25, averageTime: 25},
{time: "2018-16-02", total: 65, percentage: 60, averageTime: 20},
{time: "2018-17-02", total: 40, percentage: 20, averageTime: 20},
{time: "2018-18-02", total: 65, percentage: 20, averageTime: 20},
{time: "2018-18-02", total: 35, percentage: 23, averageTime: 20}
];

var max = Math.max(...myArray.map(e => e.total));

console.log(max);
Faly
  • 13,291
  • 2
  • 19
  • 37
0

You can find the maximum 'total' value in the array and then find all the elements of the array with that maximum value.

var myArray = [
{time: "2018-12-02", total: 25, percentage: 20, averageTime: 20},
{time: "2018-13-02", total: 25, percentage: 20, averageTime: 20},
{time: "2018-14-02", total: 35, percentage: 25, averageTime: 25},
{time: "2018-16-02", total: 65, percentage: 60, averageTime: 20},
{time: "2018-17-02", total: 40, percentage: 20, averageTime: 20},
{time: "2018-18-02", total: 65, percentage: 20, averageTime: 20},
{time: "2018-18-02", total: 35, percentage: 23, averageTime: 20}
];

var max = Math.max(...myArray.map(e => e.total));
var time = myArray.filter(item => item.total == max);

console.log(time);
Cata John
  • 1,371
  • 11
  • 19
0

One possible approach:

function getMaxValue(myArray) {
    var totals = myArray.map(x => x.total);
    var max = filter(x => x == Math.max(totals));
    return max.length == 1 ? max[0] : 'unable to solve it';
}
guijob
  • 4,413
  • 3
  • 20
  • 39