如何用JavaScript计算数组中的重复值?

阅读时长 3 分钟读完

在前端开发中,经常需要对数组进行操作。其中一个常见的需求是计算数组中的重复值,以便更好地理解数据和分析结果。

原始方法

最简单的方法是使用for循环来遍历数组,并将每个元素与其余元素比较。如果两个元素相等,则计数器增加1。

-- -------------------- ---- -------
-------- -------------------- -
  --- ----- - --
  --- ---- - - -- - - ----------- ---- -
    --- ---- - - - - -- - - ----------- ---- -
      -- ------- --- ------- -
        --------
      -
    -
  -
  ------ ------
-

这种方法的时间复杂度为O(n^2),即使数组很小,也会导致性能问题。

使用对象

我们可以使用对象来跟踪每个值的出现次数,从而更有效地计算重复值。

-- -------------------- ---- -------
-------- -------------------- -
  --- --- - ---
  --- ----- - --
  --- ---- - - -- - - ----------- ---- -
    -- -------------- -
      ----------- - --
    - ---- -
      --------------
    -
  -
  --- ---- --- -- ---- -
    -- --------- - -- -
      --------
    -
  -
  ------ ------
-

这种方法的时间复杂度为O(n),因为只需一次循环来跟踪每个值的出现次数。此外,我们可以轻松地扩展它来获取每个重复值的列表。

-- -------------------- ---- -------
-------- ------------------ -
  --- --- - ---
  --- ------ - ---
  --- ---- - - -- - - ----------- ---- -
    -- -------------- -
      ----------- - --
    - ---- -
      --------------
    -
  -
  --- ---- --- -- ---- -
    -- --------- - -- -
      -------------------------
    -
  -
  ------ -------
-

使用Map

与使用对象类似,我们也可以使用ES6中的Map来跟踪每个值的出现次数。

-- -------------------- ---- -------
-------- -------------------- -
  --- --- - --- ------
  --- ----- - --
  --- ---- --- -- ---- -
    -- --------------- -
      ------------ ---
    - ---- -
      ------------ ------------ - ---
    -
  -
  --- ---- ----- ---- -- ---- -
    -- ---- - -- -
      --------
    -
  -
  ------ ------
-

这种方法的时间复杂度为O(n),与使用对象相同,但我们可以更容易地将其扩展为获取重复值的列表。

结论

在计算数组中重复值时,使用对象或Map比使用for循环更有效。虽然两种方法都可以工作,但使用对象或Map可以提高性能并允许更多的扩展。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/24729

纠错
反馈