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的簡單語法來獲得最終輸出。

更新於:2024年6月27日

2K+ 次瀏覽

啟動您的職業生涯

透過完成課程獲得認證

開始
廣告