![](/img/trans.png)
[英]How do I construct a new array of object with some deleted properties from another array of objects in JavaScript
[英]I want to do some operation and make new array of object from result i'm getting in another AOB
開發人員,我希望你們在這段時間里都做得很好,很健康,
MAC
地址的不同 object 的Total_Count
Status = "Complete"
的計數百分比,因此Total(of where Status = "Complete") / Total (of same MAC address) * 100
讓我展示結果並期待 output,
data = [
{
Device_MAC: "45:6F:28:C1:2E:C0",
Status: "Complete",
Total: 1,
Device_Name: "Device 1",
},
{
Device_MAC: "44:6F:28:C1:2E:C1",
Status: "Complete",
Total: 2,
Device_Name: "Device 2",
},
{
Device_MAC: "44:6F:28:C1:2E:C1",
Status: "Incomplete",
Total: 4,
Device_Name: "Device 2",
},
{
Device_MAC: "44:6F:28:C1:2E:C0",
Status: "Complete",
Total: 63,
Device_Name: "Device 3",
},
{
Device_MAC: "44:6F:28:C1:2E:C0",
Status: "Incomplete",
Total: 34,
Device_Name: "Device 3",
},
];
現在你可以看到有一個名為Total
的特定鍵,它描述了基於Status
的某些設備的計數
我想要帶有Percentage
鍵的結果,其中(Total Status Complete / Total Complete + Total Incomplete) * 100
例如,對於Device_MAC: "44:6F:28:C1:2E:C1"
,Total Complete = 2
and Total Complete(2) + Incomplete(4) = 6
所以我的百分比將是(2 / 6) * 100
。
output = [
{
Device_MAC: "45:6F:28:C1:2E:C0",
Total: 1,
Percentage:100,
Device_Name: "Device 1",
},
{
Device_MAC: "44:6F:28:C1:2E:C1",
Total: 6,
Percentage:50,
Device_Name: "Device 2",
},
{
Device_MAC: "44:6F:28:C1:2E:C0",
Total: 97,
Percentage:64.94,
Device_Name: "Device 3",
},
];
if (data.length) {
let uniqueMac = [
...new Set(
data.map((obj) => {
return obj.Device_MAC;
})
),
];
uniqueMac.forEach((mac) => {
//Don't know how to handle here
});
}
這可以通過一個相當標准的“groupBy”來實現,使用reduce()
按 MAC 地址對元素進行分組,然后映射結果以計算百分比。
const data = [{ Device_MAC: "45:6F:28:C1:2E:C0", Status: "Complete", Total: 1, Device_Name: "Device 1", }, { Device_MAC: "44:6F:28:C1:2E:C1", Status: "Complete", Total: 2, Device_Name: "Device 2", }, { Device_MAC: "44:6F:28:C1:2E:C1", Status: "Incomplete", Total: 4, Device_Name: "Device 2", }, { Device_MAC: "44:6F:28:C1:2E:C0", Status: "Complete", Total: 63, Device_Name: "Device 3", }, { Device_MAC: "44:6F:28:C1:2E:C0", Status: "Incomplete", Total: 34, Device_Name: "Device 3", },], result = Object.values( data.reduce((a, { Status, Total, ...rest }) => ( (a[rest.Device_MAC]??= {...rest, Complete: 0, Incomplete: 0 })[Status] += Total, a ), {}) ).map(({ Complete, Incomplete, ...rest }) => ( {...rest, Total: (Complete + Incomplete), Percentage: ((Complete / (Complete + Incomplete)) * 100).toFixed(2) || 0, } )); console.log(result);
.as-console-wrapper { max-height: 100%;important: top; 0; }
不過,我希望您對我的回答進行評論,無論好壞。 發表評論。 -:)
let data = [{ Device_MAC: "45:6F:28:C1:2E:C0", Status: "Complete", Total: 1, Device_Name: "Device 1", }, { Device_MAC: "44:6F:28:C1:2E:C1", Status: "Complete", Total: 2, Device_Name: "Device 2", }, { Device_MAC: "44:6F:28:C1:2E:C1", Status: "Incomplete", Total: 4, Device_Name: "Device 2", }, { Device_MAC: "44:6F:28:C1:2E:C0", Status: "Complete", Total: 63, Device_Name: "Device 3", }, { Device_MAC: "44:6F:28:C1:2E:C0", Status: "Incomplete", Total: 34, Device_Name: "Device 3", },],
let finalResult = [];
if (data.length) {
let uniqueMac = [
...new Set(
data.map((obj) => {
return obj.Device_MAC;
})
),
];
uniqueMac.forEach((mac) => {
let Incomplete = data.filter((obj) => {
return obj.Device_MAC == mac && obj.Status == "Incomplete";
});
let Complete = data.filter((obj) => {
return obj.Device_MAC == mac && obj.Status == "Complete";
});
let obj = Incomplete && Incomplete.length ? Incomplete[0] : Complete[0];
delete obj.Status;
let Total = null,
Compliance = null;
if (Incomplete && Incomplete.length) {
Incomplete = Incomplete[0];
Total += Incomplete.Total_Swipe;
}
if (Complete && Complete.length) {
Complete = Complete[0];
Total += Complete.Total_Swipe;
obj.Compliance = ((Complete.Total_Swipe / Total) * 100).toFixed(2);
} else {
obj.Compliance = ((Incomplete.Total_Swipe / Total) * 100).toFixed(2);
}
finalResult.push(obj);
});
}
console.log(finalResult);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.