JavaScript 通过两个属性分组JSON对象并计数

JavaScript 通过两个属性分组JSON对象并计数

问题陈述:我们需要将JSON对象的两个属性相加并计算其出现次数。例如,如果我们在JSON中有姓名和年龄属性,那么将它们分组在一个单独的属性中,并计算它们的出现次数。

什么是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数据的两个属性,并将它们与underscore结合起来。然后检查是否分组在一起,并且具有相同值的属性,然后将计数器增加1。如果没有找到分组,则返回计数1。

步骤

下面的算法专注于合并JSON对象的两个属性并计算其值。按照以下步骤实施给定的问题-

步骤1 :定义一个名为jsonData的JSON数据。

步骤2 :声明一个名为dataCount的函数。它有3个参数,数组,p1和p2。

步骤3 :创建一个空对象来存储结果JSON数据。

步骤4 :初始化一个for循环,迭代到数组的长度。

步骤5 :现在使用相同的索引值使用underscore添加两个属性p1和p2。并将该值分配给batch变量。

步骤6 :放置一个if else块来检查条件。如果未找到分组批次,则将其值设置为1。否则,增加1。

步骤7 :当在for循环中迭代所有元素时,返回组的值。

步骤8 :现在调用函数dataGrouped并传递参数。

步骤9 :打印程序的结果。

示例

// 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循环,以运行直到数组的最后一个索引。之后,我们用下划线将两个属性组合在一起,得到一个属性,并将其分配给一个批次变量。

现在我们定义了一个if else块。它将检查group是否可用,如果可用则增加其计数,否则将其保持为1。在最后一步返回group的值,并使用给定的参数调用函数。

时间和空间复杂度

所以我们得出结论,对于这个问题,函数dataCount()只适用于对象中存在的元素数量。那么时间复杂度将为O(n)。这里n是输入数据的长度。而程序将占用相同的内存O(n),因为整个函数在group对象中存储了每批次的一个计数值。

结论

这是处理JSON数据的基本功能。我们已经看到了如何计算JSON中相似数据的出现次数,以减少数据的复杂性,并在另一个JSON对象中显示它们。在程序中,我们只使用了javascript的简单语法来得到最终输出。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程