簡體   English   中英

我想做一些操作並根據我進入另一個 AOB 的結果制作新的 object 數組

[英]I want to do some operation and make new array of object from result i'm getting in another AOB

開發人員,我希望你們在這段時間里都做得很好,很健康,

  1. 我想做一些操作,比如兩個或多個具有相同MAC地址的不同 object 的Total_Count
  2. 基於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 我想要基於唯一的 MAC:

  1. 完整 + 不完整的總數
  2. 百分比
  3. 不需要狀態鍵值
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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM