JavaScript 通过两个属性和计数对 JSON 对象进行分组

javascriptweb developmentfront end technologyobject oriented programming

问题指出我们必须添加 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 数据的两个属性并将它们与下划线组合在一起。然后检查它是否分组在一起并具有具有相同值的属性,因此将计数器增加到 1。如果没有找到任何组,则将其计数返回为 1。

算法

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

步骤 1:定义 JSON 数据并将其命名为 jsonData。

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

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

步骤 4:初始化 for 循环以迭代直到数组的长度。

步骤 5:现在添加两个带有下划线且具有相同索引值的属性 p1 和 p2。并在批处理变量中分配此值。

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

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

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

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

示例

// 以 JSON 格式定义数组
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"}
];



//定义带有三个参数数组、p1 和 p2 的函数
function dataCount(array, p1, p2) {
const group = {};

//初始化 for 循环
for (let i = 0; i < array.length; i++) {

    
    //使用 _ 添加数组的属性
    const batch = array[i][p1] + '_' + array[i][p2];
    
    // 条件语句 if
    if (!group[batch]) {
      group[batch] = 1;
    } else {
      group[batch]++;
    }
  }

  //返回组值
  return group;
}

//通过传递参数调用函数
const dataGrouped = dataCount(jsonData , 'location', 'identity');

//打印输出
console.log("分组 JSON 数据后,计数如下")
console.log(dataGrouped);

输出

分组 JSON 数据后,计数如下
{
  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 形式的数组。其中数据对象以键和值对的形式划分。定义了两个键,第一个是位置,第二个是身份。因此存在一些重复的数据。我们必须对它们进行排序并对这些数据进行计数。

在下一步中,我们创建了一个函数来解决这个问题。所以基本上我们在函数中传递了三个参数。第一个参数是数组,第二个是属性 p1,第三个也是属性 p2。现在该组是一个 JSON 形式的空数组。

然后我们初始化了一个 for 循环,运行到数组的最后一个索引。之后,我们将两个属性与下划线组合起来以获得一个属性并将其分配给批处理变量。

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

时间和空间复杂度

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

结论

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


相关文章