我實際上正在開發一個 vue apexchart stat 模塊,我必須處理空值,
所以我必須計算一天中事件的數量,我有三種型別的事件,a、b 和 c,它們可以在同一天或不同的日子發生,所以我最終得到了三個物件:
const ObjectA = [
{'20/10/21': 3},
{'25/10/21': 1}
],
const ObjectB = [
{'25/10/21': 4}
]
所以我在這種情況下我想要兩個陣列,它們必須是這樣的:
const ArrayA = [3,1]
const ArrayB = [null, 4]
所以首先我用這種方式填補了兩個物件之間的空白,最終得到了這兩個:
const ObjectA = [
{'20/10/21': 3},
{'25/10/21': 1}
],
const ObjectB = [
{'20/10/21': null},
{'25/10/21': 4}
]
但是當我嘗試將這些物件轉換為陣列時,我總是以空值堆疊在陣列的末尾,例如
const ArrayA = [3,1]
const ArrayB = [4, null]
無論我使用什么方法Object.values(ObjectX),一個 forEach 回圈Object.entries(ObjectX)等等......我總是有一個不符合我期望的陣列。
所以我第一次想知道為什么空值總是出現在我的陣列的末尾,其次我要求一個答案,看看我在哪里遺漏了我的觀點。
我正在使用的實際代碼有一個預覽:
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 work
uj5u.com熱心網友回復:
您可以這樣做,將每個步驟分解為一個函式:
- 將缺失的日期添加到每個相反的物件陣列 (
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);
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/315797.html
標籤:javascript 数组 目的
