在 JavaScript 中合并子数组

javascriptweb developmentfront end technologyobject oriented programming更新于 2025/1/17 7:40:17

此问题要求借助 JavaScript 概念合并子数组。我们将在这个问题中使用电子邮件数据。此外,我们将合并同名人员的电子邮件。

理解问题

为了解决任何给定的语句,我们首先需要深入了解问题。此问题将分解为子问题。因此,解决这个问题将很容易。考虑解决问题必须遵循的任何重要程序或阶段。

要解决这个问题,我们必须根据匹配的名称来组织电子邮件地址。这可以通过迭代输入数组来完成,同时利用映射来保存每个名称的电子邮件地址。

算法

步骤 1 − 声明一个名为 mergeSubArray 的函数,将元素数组作为输入。此函数将把所有人员的电子邮件地址分组到一个数组中,然后返回一个新数组。

步骤 2 − 声明最终的 emailData 数组,其中数组输入中存在的所有元素组都有不同的组合。现在用一个空数组声明它。此阶段将使用"Set"来存储电子邮件地址,因为它可以消除重复数据

步骤 3 − 循环遍历每个元素的输入数组。在此阶段,当前元素中个人的姓名和电子邮件将被删除。如果当前名称还没有,请创建一个包含电子邮件的新批次并将其添加到 emailData。

步骤 4 - 将每个电子邮件地址添加到现在 emailData 中的名称的集合中。

步骤 5 - 循环遍历 emailData 后,将创建一个名为 showResult 的新数组,它将包含已排序的电子邮件地址。

步骤 6 - 因此,我们已使用其名称对电子邮件进行排序,并将结果放入结果数组中

步骤 7 - 这就是对子数组进行分组和合并以提供结果数组的方式。

示例

//创建一个包含名称和电子邮件的数组
const arr = [ ["Ayaan", "ayaanshri@email.com", "ayaan00@email.com"], ["Maahi", "maahibhatt@email.com"], ["Ayaan", "ayaansss@email.com", "ayaan_nepal@email.com"], ["Maahi", "maahi@email.com"] ];

//定义函数mergeSubArray
function mergeSubArray(arr) {
  const emailData = {};

  for (let i = 0; i < arr.length; i++) {
    const name = arr[i][0];
    const mail = arr[i].slice(1);

    if (!emailData.hasOwnProperty(name)) {
      emailData[name] = new Set(mail);
    } else {
      mail.forEach(email => emailData[name].add(email));
    }
  }
  const showResult = [];
  for (const [name, mail] of Object.entries(emailData)) {
    showResult.push([name, ...[...mail].sort()]);
  }
  return showResult;
}
console.log(mergeSubArray(arr));

输出

[
    [
      'Ayaan',
      'ayaan00@email.com',
      'ayaan_nepal@email.com',
      'ayaanshri@email.com',
      'ayaansss@email.com'
    ],
    [ 'Maahi', 'maahi@email.com', 'maahibhatt@email.com' ]
]

时间和空间复杂度

mergeSubArray() 函数的时间复杂度为 O(n log n),其中 n 表示输入数组中的电子邮件地址总数。这是因为该函数对电子邮件地址进行排序并使用 Sets 检查重复项,这两种情况的最坏时间复杂度均为 O(n log n)。在最坏的情况下,遍历 emailData 的循环的时间复杂度为 O(n),其中 n 是输入数组中不同名称的总数。

该函数的空间复杂度为 O(n),其中 n 是输入数组中的电子邮件总数。这样,​​输入数组中的每个名称都可以在函数创建的哈希表中拥有自己的条目。哈希表中的每个条目都包含一个最多包含 n 个电子邮件地址的 Set。

结论

我们通过使用映射来存储每个名称的所有电子邮件地址来实现这一点。输入数组中的电子邮件地址总数(用整数 n 表示)决定了后续过程的时间复杂度和空间复杂度。


相关文章


有用资源