JavaScript根據兩個屬性分組JSON物件並計數
題目要求我們將JSON物件的兩個屬性相加並計算其出現次數。例如,如果JSON中具有name和age屬性,則將它們組合成一個屬性並計算其出現次數。
什麼是JSON?
JSON (JavaScript 物件表示法)是一種輕量級的資料格式,用於在裝置之間傳輸資料。它是人類可讀和可寫的。JSON採用鍵值對的形式。鍵是字串,用於定義值。在JSON中,每個條目用分號隔開。例如 - {“name” : “Peter”},在這個例子中,name是鍵,Peter是其值。
const jsonData = [ { name: 'Aaroni', year: 2020, month: 'May' }, { name: 'Peter', year: 2021, month: 'December' }, { name: 'Jack', year: 2021, month: 'March' }, ]
根據兩個屬性分組JSON物件並計數
為了解決這個問題,我們將使用JSON資料的兩個屬性,並用下劃線將它們組合起來。然後檢查它們是否已分組在一起並具有相同值的屬性,如果是則將計數器加1。如果沒有找到組,則將其計數返回為1。
演算法
下面的演算法重點是合併JSON物件的兩個屬性並計算其值。請按照以下步驟實現給定的問題:
步驟1:定義JSON資料並將其命名為jsonData。
步驟2:宣告一個名為dataCount的函式。它接受三個引數:陣列、p1和p2。
步驟3:建立一個空物件來儲存結果JSON資料。
步驟4:初始化一個for迴圈,迭代到陣列的長度。
步驟5:現在將兩個屬性p1和p2與下劃線組合,使用相同的索引值。並將此值賦給batch變數。
步驟6:設定if else塊來檢查條件。如果未找到組batch,則將其值設定為1。否則,將值加1。
步驟7:當for迴圈遍歷完所有元素後,返回組的值。
步驟8:現在呼叫函式dataGrouped()並傳遞引數。
步驟9:列印程式的結果。
用於根據兩個屬性分組JSON物件並計數的JavaScript程式碼
// Define array in JSON format const jsonData = [ {"location":"Kerala", "identity":"Employee"}, {"location":"Kerala", "identity":"Visitor"}, {"location":"Kerala", "identity":"Visitor"}, {"location":"Kerala", "identity":"Worker"}, {"location":"Mumbai", "identity":"Employee"}, {"location":"Mumbai", "identity":"resident"}, {"location":"Mumbai", "identity":"Worker"}, {"location":"Mumbai", "identity":"Resident"}, {"location":"Hyderabad", "identity":"Resident"}, {"location":"Hyderabad", "identity":"Homemaker"}, {"location":"Hyderabad", "identity":"Employee"}, {"location":"Hyderabad", "identity":"Resident"}, {"location":"Hyderabad", "identity":"Homemaker"}, {"location":"Hyderabad", "identity":"Resident"} ]; //Define function with three arguments array, p1 and p2 function dataCount(array, p1, p2) { const group = {}; // initialize a for loop for (let i = 0; i < array.length; i++) { //adding properties of array with _ const batch = array[i][p1] + '_' + array[i][p2]; // Conditional statements if if (!group[batch]) { group[batch] = 1; } else { group[batch]++; } } //return group value return group; } //Calling function with by passing arguments const dataGrouped = dataCount(jsonData , 'location', 'identity'); //Print the output console.log("After grouping JSON data, count is as follows") console.log(dataGrouped);
輸出
After grouping JSON data, count is as follows { Kerala_Employee: 1, Kerala_Visitor: 2, Kerala_Worker: 1, Mumbai_Employee: 1, Mumbai_resident: 1, Mumbai_Worker: 1, Mumbai_Resident: 1, Hyderabad_Resident: 3, Hyderabad_Homemaker: 2, Hyderabad_Employee: 1 }
程式碼解釋
在上面的程式碼中,我們定義了一個JSON形式的陣列。在這個資料中,物件被分成鍵值對的形式。定義了兩個鍵,第一個是location,第二個是identity。因此存在一些重複的資料。我們必須對它們進行排序並計算這些資料的數量。
在下一步中,我們建立了一個函式來解決這個問題。所以基本上我們在函式中傳遞了三個引數。第一個引數是陣列,第二個是屬性p1,第三個也是屬性p2。現在group是一個JSON形式的空陣列。
然後我們初始化一個for迴圈,直到陣列的最後一個索引。之後,我們將兩個屬性用下劃線組合成一個屬性,並將其賦值給batch變數。
現在我們定義了一個if else塊。它將檢查組是否可用,如果可用則增加其計數,否則保持為1。在最後一步中,返回group值並使用給定的引數呼叫函式。
時間和空間複雜度
時間複雜度將為O(n)。這裡n是輸入資料的長度。空間複雜度將為O(n),因為該函式在group物件中為每個batch儲存一個計數值。
結論
因此,我們得出了這個問題的結論,函式dataCount()僅適用於物件中存在的元素數量。這是處理JSON資料的基本功能。我們已經看到了如何在JSON中計算相似資料的出現次數,以減少資料的複雜性並在另一個JSON物件中顯示它們。在這個程式中,我們只使用了javascript的簡單語法來獲得最終輸出。