dream123
dream123

Reputation: 43

Calculate Percentage in Java Script and Output Result

I am trying to use below Script to Get the Average of Disconnect Devices .The results are output in group for each Test Customer .

var dataObject = [{
    "Customer_Nbr": "13",
    "Customer_Name": "Test1",
    "Connected_Devices": 7,
    "Disconnected_Devices": 1,
    "Total_Devices": 8
  },
  {
    "Customer_Nbr": "13",
    "Customer_Name": "Test1",
    "Connected_Devices": 6,
    "Disconnected_Devices": 2,
    "Total_Devices": 8
  },
  {
    "Customer_Nbr": "12",
    "Customer_Name": "Test3",
    "Connected_Devices": 8,
    "Disconnected_Devices": 2,
    "Total_Devices": 10
  }
];
groups = dataObject.reduce(function(r, o) {
  var k = o.Customer_Nbr + o.Customer_Name;
  if (r[k]) {
    if (o.Disconnected_Devices)
     (r[k].Disconnected_Devices += o.Disconnected_Devices) && ++r[k].Average;
  } else {
    r[k] = o;
    r[k].Average = 1; // taking 'Average' attribute as an items counter(on the first phase)
  }
  return r;
}, {});

// getting "average of Points"    
var result = Object.keys(groups).map(function(k) {
  groups[k].Average = Math.round(groups[k].Disconnected_Devices / groups[k].Average);
  return groups[k];
});

console.log(result)

Now I also want grouped output to have a percentage calculation which would be result/Total_Devices * 100 .

Output Should be Something like Assuming Total_Devices Count is constant in Input data -

[
  {
    Customer_Nbr: '13',
    Customer_Name: 'Test1',
    Connected_Devices: 7,
    Disconnected_Devices: 3,
    Total_Devices: 8,
    Average: 2
    Percent: 25
  },
  {
    Customer_Nbr: '12',
    Customer_Name: 'Test3',
    Connected_Devices: 8,
    Disconnected_Devices: 2,
    Total_Devices: 10,
    Average: 2
    Percent: 20
  }
]

Upvotes: 1

Views: 68

Answers (1)

Breezer
Breezer

Reputation: 10490

Something like this maybe?

   var dataObject = [
      {
        Customer_Nbr: "13",
        Customer_Name: "Test1",
        Connected_Devices: 7,
        Disconnected_Devices: 1,
        Total_Devices: 8,
      },
      {
        Customer_Nbr: "13",
        Customer_Name: "Test1",
        Connected_Devices: 6,
        Disconnected_Devices: 2,
        Total_Devices: 8,
      },
      {
        Customer_Nbr: "12",
        Customer_Name: "Test3",
        Connected_Devices: 8,
        Disconnected_Devices: 2,
        Total_Devices: 10,
      },
    ];
    groups = dataObject.reduce(function (r, o) {
      var k = o.Customer_Nbr + o.Customer_Name;
      if (r[k]) {
        if (o.Disconnected_Devices)
          (r[k].Disconnected_Devices += o.Disconnected_Devices) && ++r[k].Average;
      } else {
        r[k] = o;
        r[k].Average = 1; // taking 'Average' attribute as an items counter(on the first phase)
      }
      return r;
    }, {});
    
    // getting "average of Points"
    var result = Object.keys(groups).map(function (k) {
      groups[k].Average = Math.round(
        groups[k].Disconnected_Devices / groups[k].Average
      );
      groups[k].percentage = (groups[k].Average/groups[k].Total_Devices) * 100;
      return groups[k];
    });
    
    console.log(result);

Upvotes: 1

Related Questions