簡體   English   中英

如何在javascript中的對象數組下獲取值重復的計數

[英]How to get the count of Value repetition under array of objects in javascript

我有一個數組,它有一些重復計數。 我想獲得重復次數。 我的數組是這樣的:

var array = [
    { asset: "A", sector: "Hospital" },
    { asset: "B", sector: "Hardware" },
    { asset: "C", sector: "Networking" },
    { asset: "D", sector: "Networking" },
    { asset: "E", sector: "Food" },
    { asset: "F", sector: "Hospital" },
    { asset: "G", sector: "Hardware" },
    { asset: "H", sector: "Industrial" },
    { asset: "I", sector: "Transport" },
    { asset: "J", sector: "Hardware" },
    { asset: "K", sector: "Networking" },
    { asset: "L", sector: "Transport" }
]

現在我想要重復計數也是這樣的排序順序:

final_array = [
    { sector: 'Hardware', count: 3 },
    { sector: 'Networking', count: 3 },
    { sector: 'Hospital', count: 2 },
    { sector: 'Transport', count: 2 },
    { sector: 'Food', count: 1 },
    { sector: 'Industrial', count: 1 }
]

我不知道從哪里可以做到這一點。 我有很多鏈接,但他們解決了數組下的重復而不是對象數組。

我使用一種方法,但不能解決我的問題

var finalD = [];
c.forEach(x => {
    if (isSectorExists(x.sector, finalD) == true) {
        //Here I don't know how I will increase the counter.
    } else {
        finalD.push({ sector: x.sector, count: 1 });
    }
});

var isSectorExists = (sector, arr) => {
    return arr.some(function(el) {
        return el.sector === sector;
    });
};

我知道我的方法很長。 有人有最好和最簡單的方法來完成這種任務嗎? 任何幫助真的很感激。 提前致謝

您可以構建一個以扇區名稱為鍵的對象counts和一個將計數存儲為值的對象,遍歷數組並更新這些計數,然后最終獲得該counts對象的值。

 var array = [ { asset: "A", sector: "Hospital" }, { asset: "B", sector: "Hardware" }, { asset: "C", sector: "Networking" }, { asset: "D", sector: "Networking" }, { asset: "E", sector: "Food" }, { asset: "F", sector: "Hospital" }, { asset: "G", sector: "Hardware" }, { asset: "H", sector: "Industrial" }, { asset: "I", sector: "Transport" }, { asset: "J", sector: "Hardware" }, { asset: "K", sector: "Networking" }, { asset: "L", sector: "Transport" } ]; var counts = array.reduce((m, c) => { if (c.sector in m) m[c.sector].count += 1; else m[c.sector] = { sector: c.sector, count: 1}; return m; }, {}); let finalArray = Object.values(counts).sort((a, b) => b.count - a.count); console.log(finalArray);

這將在線性時間內獲得計數(而不是為每個元素調用isSectorExists使其成為O(n^2)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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