Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

176
Vistas
Find missing months in js array

I have the following Array

[
  { Month: '2021-05', Count: 36 },
  { Month: '2021-06', Count: 1048 },
  { Month: '2021-07', Count: 572 },
  { Month: '2021-09', Count: 3 },
  { Month: '2021-12', Count: 52 },
  { Month: '2022-01', Count: 4 },
  { Month: '2022-02', Count: 273 },
  { Month: '2022-04', Count: 96 }
]

where I am missing a few months. I know how many months is needed (could be 12 or could be more or less) and I need the missing months (like 2021-08 in this case) to be added with a count of 0. How to go about it?

about 4 years ago · Juan Pablo Isaza
3 Respuestas
Responde la pregunta

0

Here's a pure, functional approach which will create a new array with new items, inserting all of the missing months in order. The code includes some comments explaining the procedure:

const parseDate = str => str.split('-').map(Number);
const formatDate = (year, month) => `${year}-${String(month).padStart(2, '0')}`;

function createContinuousMonthCounts (array) {
  const all = [];
  // get initial year/month values from first item
  let [year, month] = parseDate(array[0].Month);

  const advanceDate = () => {
    month += 1;
    if (month > 12) {
      year += 1;
      month = 1;
    }
  };

  for (const item of array) {
    const [y, m] = parseDate(item.Month);
    // while the current month is not equal to the current item's month,
    // create an entry for the month, append it, and advance to the next month
    while (year !== y || month !== m) {
      all.push({Month: formatDate(year, month), Count: 0});
      advanceDate();
    }
    // after we're up to date, add the current item and advance the date
    all.push({...item});
    advanceDate();
  }

  return all;
}

const array = [
  { Month: '2021-05', Count: 36 },
  { Month: '2021-06', Count: 1048 },
  { Month: '2021-07', Count: 572 },
  { Month: '2021-09', Count: 3 },
  { Month: '2021-12', Count: 52 },
  { Month: '2022-01', Count: 4 },
  { Month: '2022-02', Count: 273 },
  { Month: '2022-04', Count: 96 },
];

const all = createContinuousMonthCounts(array);

for (const {Month, Count} of all) console.log(Month, Count);

about 4 years ago · Juan Pablo Isaza Denunciar

0

Just a shot into the dark (please consider adding some Code to your question):

const months = [
  { Month: '2021-05', Count: 36 },
  { Month: '2021-06', Count: 1048 },
  { Month: '2021-07', Count: 572 },
  { Month: '2021-09', Count: 3 },
  { Month: '2021-12', Count: 52 },
  { Month: '2022-01', Count: 4 },
  { Month: '2022-02', Count: 273 },
  { Month: '2022-04', Count: 96 }
];

const neededMonths = [
  "2021-01","2021-02","2021-03","2021-04","2021-05","2021-06","2021-07","2021-08","2021-09","2021-10","2021-11","2021-12"
]

const missedMonths = [];

months.map( m => {
  if(neededMonths.indexOf(m.Month) == -1 ){
    missedMonths.push(m.Month);
  }
});

console.log(missedMonths);

about 4 years ago · Juan Pablo Isaza Denunciar

0

You first need a method to find all the months between a range, then iterate across all the months and add the missing ones with count: 0:

const months = [
  { Month: '2021-05', Count: 36 },
  { Month: '2021-06', Count: 1048 },
  { Month: '2021-07', Count: 572 },
  { Month: '2021-09', Count: 3 },
  { Month: '2021-12', Count: 52 },
  { Month: '2022-01', Count: 4 },
  { Month: '2022-02', Count: 273 },
  { Month: '2022-04', Count: 96 }
]

const firstMonth = months.at(0).Month;
const lastMonth = months.at(-1).Month;

const [initialYear, initialMonth] = firstMonth.split('-');
const [endingYear, endingMonth] = lastMonth.split('-');

const allMonths = [];

let currentMonth = initialMonth;
let currentYear = initialYear;
while (`${currentYear}-${(''+currentMonth).padStart(2, '0')}` !== lastMonth) {
  allMonths.push(`${currentYear}-${(''+currentMonth).padStart(2, '0')}`);
  currentMonth++;
  if (currentMonth === 13) {
    currentMonth = 1;
    currentYear++;
  }
}

allMonths.forEach(month => {
  if (!months.find(m => m.Month === month)) {
     months.push({Month: month, count: 0});
  }
});

console.log(months);

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda