De hecho, estoy trabajando en un módulo de estadísticas vue apexchart y tengo que manejar el valor nulo,
Así que tengo que contar la cantidad de eventos en un día y tengo tres tipos de eventos, a, b y c, que pueden ocurrir en el mismo día o en días diferentes, así que termino con tres objetos:
const ObjectA = [ {'20/10/21': 3}, {'25/10/21': 1} ], const ObjectB = [ {'25/10/21': 4} ]Entonces, en este caso, quiero tener dos matrices, que tienen que ser así:
const ArrayA = [3,1] const ArrayB = [null, 4]Entonces, antes que nada, lleno el vacío entre los dos objetos de esta manera para terminar con estos dos:
const ObjectA = [ {'20/10/21': 3}, {'25/10/21': 1} ], const ObjectB = [ {'20/10/21': null}, {'25/10/21': 4} ]Pero cuando trato de convertir estos objetos en una matriz, siempre termino con el valor nulo apilado al final de mi matriz, como
const ArrayA = [3,1] const ArrayB = [4, null] Y cualquiera que sea el método que estoy usando, Object.values(ObjectX) , un bucle forEach con Object.entries(ObjectX) etc... Siempre tengo una matriz que no se ajusta a mis expectativas.
Entonces, en un primer momento, me pregunto por qué los valores nulos siempre terminan al final de mis matrices y, en segundo lugar, pido una respuesta para ver dónde me estoy perdiendo el punto.
Hay una vista previa del código real que estoy usando:
const momentStartDate = moment(paramStartDate) const momentEndDate = moment(paramEndDate) if (moment(created).isBetween(momentStartDate, momentEndDate, 'days', '[]')) { if (!newLabels.includes(createdDate)) { newLabels.push(createdDate) } if (!open[createdDate]) { open[createdDate] = 0 } open[createdDate]++ } else if ... newLabels.forEach((item) => { if (open[item] === undefined) { open[item] = null } }) [...] const openTemp = [] for (let i = 0; i < Object.keys(open).length; i++) { openTemp.push(Object.values(open)[i]) } Object.keys(closed).forEach((item) => { if (closed[item] === null) { openTemp.push(null) } else { openTemp.push(closed[item]) } }) // Both do not workPodrías hacerlo de esta manera, dividiendo cada paso en una función:
addMissing() )sort() )getValues ) const ObjectA = [{ "20/10/21": 3 }, { "25/10/21": 1 }]; const ObjectB = [{ "25/10/21": 4 }]; const addMissing = (oppObj) => { return (obj) => { let [[date]] = Object.entries(obj); if (!oppObj.some((obj) => Object.entries(obj)[0][0] === date)) { oppObj.push({ [date]: null }); } }; }; const sort = (a, b) => { const splitA = Object.keys(a)[0].split("/"); const splitB = Object.keys(b)[0].split("/"); return ( new Date(splitA[2], splitA[1] - 1, splitA[0]) - new Date(splitB[2], splitB[1] - 1, splitB[0]) ); }; const getValues = (o) => Object.values(o)[0]; // Add missing dates to each opposite object array ObjectA.forEach(addMissing(ObjectB)); ObjectB.forEach(addMissing(ObjectA)); // Sort each object array ObjectA.sort(sort); ObjectB.sort(sort); // Get the values of each object array const resA = ObjectA.map(getValues); const resB = ObjectB.map(getValues); console.log(resA); console.log(resB);