How to handle when array gets emptied with javascript and hbs?

How to handle when the array comes empty with javascript and hbs?

Hello, I would like to know how to do when the data object is empty and replace it?

I have an array of objects which I go through and filter according to certain parameters that the user must meet. When I have my information ready, I pass it on to my template in Handlebars, but I am investigating how I can so that when one of the users does not come to me within the array that filter replace your data

Something like the following, I validate that the user is of the role “DEV, SAC or DESIGN” and that its modality is within “FULLTIME”, after I already have it, I reduce the matrix to get the user that has the largest ” average_tracked_daily” and that’s the one I show.

const data = [{
    "user_id": 854500,
    "rol_tittle": "DEV",
    "username": "User01",
    "dayli_hours": 4,
    "total_tracked_daily": 2.41,
    "total_activity": 36,
    "average_tracked_daily": 60,
    "summaryHourWeekly": 7.56,
    "acumulateWeekly": 12,
    "rol_priority": 0,
    "time_work": "PARTTIME",
    "countStarts": [],
    "summaryStartsDaily": 0,
    "indicatorActivity_daily": "close",
    "indicadorKPIHours": "warning",
    "counts_starts_daily": [],
    "summary_starts_daily": 0
  },
  {
    "user_id": 1169488,
    "rol_tittle": "DEV",
    "username": "User02",
    "dayli_hours": 8,
    "total_tracked_daily": 7.46,
    "total_activity": 50,
    "average_tracked_daily": 93,
    "summaryHourWeekly": 21.54,
    "acumulateWeekly": 24,
    "rol_priority": 0,
    "time_work": "FULLTIME",
    "countStarts": [],
    "summaryStartsDaily": 0,
    "indicatorActivity_daily": "close",
    "indicadorKPIHours": "check",
    "counts_starts_daily": [],
    "summary_starts_daily": 0
  },
  {
    "user_id": 854472,
    "rol_tittle": "DEV",
    "username": "User03",
    "dayli_hours": 8,
    "total_tracked_daily": 8.48,
    "total_activity": 75,
    "average_tracked_daily": 106,
    "summaryHourWeekly": 26.92,
    "acumulateWeekly": 24,
    "rol_priority": 0,
    "time_work": "FULLTIME",
    "countStarts": [
      "start"
    ],
    "summaryStartsDaily": 1,
    "indicatorActivity_daily": "check",
    "indicadorKPIHours": "check",
    "counts_starts_daily": [
      "start"
    ],
    "summary_starts_daily": 1
  },
  {
    "user_id": 957706,
    "rol_tittle": "DEV",
    "username": "User04",
    "dayli_hours": 8,
    "total_tracked_daily": 8.08,
    "total_activity": 69,
    "average_tracked_daily": 101,
    "summaryHourWeekly": 22.82,
    "acumulateWeekly": 24,
    "rol_priority": 0,
    "time_work": "FULLTIME",
    "countStarts": [
      "start"
    ],
    "summaryStartsDaily": 1,
    "indicatorActivity_daily": "check",
    "indicadorKPIHours": "check",
    "counts_starts_daily": [
      "start"
    ],
    "summary_starts_daily": 1
  },
  {
    "user_id": 854517,
    "rol_tittle": "DEV",
    "username": "User05",
    "dayli_hours": 8,
    "total_tracked_daily": 6.09,
    "total_activity": 41,
    "average_tracked_daily": 76,
    "summaryHourWeekly": 21.2,
    "acumulateWeekly": 24,
    "rol_priority": 0,
    "time_work": "FULLTIME",
    "countStarts": [],
    "summaryStartsDaily": 0,
    "indicatorActivity_daily": "close",
    "indicadorKPIHours": "check",
    "counts_starts_daily": [],
    "summary_starts_daily": 0
  },
  {
    "user_id": 1476078,
    "rol_tittle": "DEV",
    "username": "User06",
    "dayli_hours": 8,
    "total_tracked_daily": 8.91,
    "total_activity": 78,
    "average_tracked_daily": 111,
    "summaryHourWeekly": 25.51,
    "acumulateWeekly": 24,
    "rol_priority": 0,
    "time_work": "FULLTIME",
    "countStarts": [
      "start"
    ],
    "summaryStartsDaily": 1,
    "indicatorActivity_daily": "check",
    "indicadorKPIHours": "check",
    "counts_starts_daily": [
      "start"
    ],
    "summary_starts_daily": 1
  },
  {
    "user_id": 1005014,
    "rol_tittle": "SAC",
    "username": "User07",
    "dayli_hours": 8,
    "total_tracked_daily": 6.09,
    "total_activity": 39,
    "average_tracked_daily": 76,
    "summaryHourWeekly": 18.28,
    "acumulateWeekly": 24,
    "rol_priority": 1,
    "time_work": "FULLTIME",
    "countStarts": [],
    "summaryStartsDaily": 0,
    "indicatorActivity_daily": "close",
    "indicadorKPIHours": "check",
    "counts_starts_daily": [],
    "summary_starts_daily": 0
  },
  {
    "user_id": 1846477,
    "rol_tittle": "DESIGN",
    "username": "User08",
    "dayli_hours": 8,
    "total_tracked_daily": 8.02,
    "total_activity": 38,
    "average_tracked_daily": 100,
    "summaryHourWeekly": 24.28,
    "acumulateWeekly": 24,
    "rol_priority": 2,
    "time_work": "FULLTIME",
    "countStarts": [
      "start"
    ],
    "summaryStartsDaily": 1,
    "indicatorActivity_daily": "close",
    "indicadorKPIHours": "check",
    "counts_starts_daily": [
      "start"
    ],
    "summary_starts_daily": 1
  }
]

let designMax = [];
let devMax = [];
let sacMax = [];

data.forEach(maxTracking => {
  if (maxTracking.rol_tittle === "DEV" && maxTracking.time_work === "FULLTIME") {
    return devMax = data.filter(element => element.rol_tittle === "DEV" && element.time_work === "FULLTIME");
  }
  if (maxTracking.rol_tittle === "SAC" && maxTracking.time_work === "FULLTIME") {
    return sacMax = data.filter(element => element.rol_tittle === "SAC" && element.time_work === "FULLTIME");
  }
  if (maxTracking.rol_tittle === "DESIGN" && maxTracking.time_work === "FULLTIME") {
    return designMax = data.filter(element => element.rol_tittle === "DESIGN" && maxTracking.time_work === "FULLTIME");
  } else {
    return {
      user_id: null,
      username: '---',
      total_tracked_daily: 0,
      total_activity: '-',
      average_tracked_daily: 0,
      dayli_hours: '-',
      rol_tittle: '-',
      rol_priority: 2,
      indicadorKPIHours: 'close',
      summaryHourWeekly: '-',
      averageActivityWeekly: '-',
      summaryStartsDaily: '-',
      time_work: '-',
      acumulateWeekly: '-'
    }
  }
})


let maxTrackedDESIGN = designMax;
let maxTrackedDev = devMax.reduce((acc, cc) => acc.average_tracked_daily > cc.average_tracked_daily ? acc : cc);
let maxTrackedSAC = sacMax.reduce((acc, cc) => acc.average_tracked_daily > cc.average_tracked_daily ? acc : cc);


console.log({
  "maxTrackedDesign": maxTrackedDESIGN,
  "maxTrackedDev": maxTrackedDev,
  "maxTrackedSAC": maxTrackedSAC
})

When the user in any of the modalities does not come, I want to be able to replace it with empty, but I would like to make it dynamic

const data = [{
    "user_id": 854500,
    "rol_tittle": "DEV",
    "username": "User01",
    "dayli_hours": 4,
    "total_tracked_daily": 2.41,
    "total_activity": 36,
    "average_tracked_daily": 60,
    "summaryHourWeekly": 7.56,
    "acumulateWeekly": 12,
    "rol_priority": 0,
    "time_work": "PARTTIME",
    "countStarts": [],
    "summaryStartsDaily": 0,
    "indicatorActivity_daily": "close",
    "indicadorKPIHours": "warning",
    "counts_starts_daily": [],
    "summary_starts_daily": 0
  },
  {
    "user_id": 1169488,
    "rol_tittle": "DEV",
    "username": "User02",
    "dayli_hours": 8,
    "total_tracked_daily": 7.46,
    "total_activity": 50,
    "average_tracked_daily": 93,
    "summaryHourWeekly": 21.54,
    "acumulateWeekly": 24,
    "rol_priority": 0,
    "time_work": "FULLTIME",
    "countStarts": [],
    "summaryStartsDaily": 0,
    "indicatorActivity_daily": "close",
    "indicadorKPIHours": "check",
    "counts_starts_daily": [],
    "summary_starts_daily": 0
  },
  {
    "user_id": 854472,
    "rol_tittle": "DEV",
    "username": "User03",
    "dayli_hours": 8,
    "total_tracked_daily": 8.48,
    "total_activity": 75,
    "average_tracked_daily": 106,
    "summaryHourWeekly": 26.92,
    "acumulateWeekly": 24,
    "rol_priority": 0,
    "time_work": "FULLTIME",
    "countStarts": [
      "start"
    ],
    "summaryStartsDaily": 1,
    "indicatorActivity_daily": "check",
    "indicadorKPIHours": "check",
    "counts_starts_daily": [
      "start"
    ],
    "summary_starts_daily": 1
  },
  {
    "user_id": 957706,
    "rol_tittle": "DEV",
    "username": "User04",
    "dayli_hours": 8,
    "total_tracked_daily": 8.08,
    "total_activity": 69,
    "average_tracked_daily": 101,
    "summaryHourWeekly": 22.82,
    "acumulateWeekly": 24,
    "rol_priority": 0,
    "time_work": "FULLTIME",
    "countStarts": [
      "start"
    ],
    "summaryStartsDaily": 1,
    "indicatorActivity_daily": "check",
    "indicadorKPIHours": "check",
    "counts_starts_daily": [
      "start"
    ],
    "summary_starts_daily": 1
  },
  {
    "user_id": 854517,
    "rol_tittle": "DEV",
    "username": "User05",
    "dayli_hours": 8,
    "total_tracked_daily": 6.09,
    "total_activity": 41,
    "average_tracked_daily": 76,
    "summaryHourWeekly": 21.2,
    "acumulateWeekly": 24,
    "rol_priority": 0,
    "time_work": "FULLTIME",
    "countStarts": [],
    "summaryStartsDaily": 0,
    "indicatorActivity_daily": "close",
    "indicadorKPIHours": "check",
    "counts_starts_daily": [],
    "summary_starts_daily": 0
  },
  {
    "user_id": 1476078,
    "rol_tittle": "DEV",
    "username": "User06",
    "dayli_hours": 8,
    "total_tracked_daily": 8.91,
    "total_activity": 78,
    "average_tracked_daily": 111,
    "summaryHourWeekly": 25.51,
    "acumulateWeekly": 24,
    "rol_priority": 0,
    "time_work": "FULLTIME",
    "countStarts": [
      "start"
    ],
    "summaryStartsDaily": 1,
    "indicatorActivity_daily": "check",
    "indicadorKPIHours": "check",
    "counts_starts_daily": [
      "start"
    ],
    "summary_starts_daily": 1
  },
  {
    "user_id": 1005014,
    "rol_tittle": "SAC",
    "username": "User07",
    "dayli_hours": 8,
    "total_tracked_daily": 6.09,
    "total_activity": 39,
    "average_tracked_daily": 76,
    "summaryHourWeekly": 18.28,
    "acumulateWeekly": 24,
    "rol_priority": 1,
    "time_work": "FULLTIME",
    "countStarts": [],
    "summaryStartsDaily": 0,
    "indicatorActivity_daily": "close",
    "indicadorKPIHours": "check",
    "counts_starts_daily": [],
    "summary_starts_daily": 0
  }
]

let designMax = [];
let devMax = [];
let sacMax = [];

data.forEach(maxTracking => {
  if (maxTracking.rol_tittle === "DEV" && maxTracking.time_work === "FULLTIME") {
    return devMax = data.filter(element => element.rol_tittle === "DEV" && element.time_work === "FULLTIME");
  }
  if (maxTracking.rol_tittle === "SAC" && maxTracking.time_work === "FULLTIME") {
    return sacMax = data.filter(element => element.rol_tittle === "SAC" && element.time_work === "FULLTIME");
  }
  if (maxTracking.rol_tittle === "DESIGN" && maxTracking.time_work === "FULLTIME") {
    return designMax = data.filter(element => element.rol_tittle === "DESIGN" && maxTracking.time_work === "FULLTIME");
  } else {
    return {
      user_id: null,
      username: '---',
      total_tracked_daily: 0,
      total_activity: '-',
      average_tracked_daily: 0,
      dayli_hours: '-',
      rol_tittle: '-',
      rol_priority: 2,
      indicadorKPIHours: 'close',
      summaryHourWeekly: '-',
      averageActivityWeekly: '-',
      summaryStartsDaily: '-',
      time_work: '-',
      acumulateWeekly: '-'
    }
  }
})


let maxTrackedDESIGN = designMax;
let maxTrackedDev = devMax.reduce((acc, cc) => acc.average_tracked_daily > cc.average_tracked_daily ? acc : cc);
let maxTrackedSAC = sacMax.reduce((acc, cc) => acc.average_tracked_daily > cc.average_tracked_daily ? acc : cc);


console.log({
  "maxTrackedDesign": maxTrackedDESIGN,
  "maxTrackedDev": maxTrackedDev,
  "maxTrackedSAC": maxTrackedSAC
})

But I can’t map it and validate it to be able to replace that data so that when it comes empty I can replace it and make it dynamic.