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+ 次浏览

启动您的职业生涯

通过完成课程获得认证

开始
广告
© . All rights reserved.