Analysis and Implementation of Duplicate Value Counting Methods in JavaScript Arrays

Nov 19, 2025 · Programming · 13 views · 7.8

Keywords: JavaScript | Array Operations | Duplicate Counting | Algorithm Analysis | Performance Optimization

Abstract: This paper provides an in-depth exploration of various methods for counting duplicate elements in JavaScript arrays, with focus on the sorting-based traversal counting algorithm, including detailed explanations of implementation principles, time complexity analysis, and practical applications.

Introduction

Counting the frequency of elements in an array is a common requirement in JavaScript programming. This paper analyzes multiple implementation methods based on high-scoring Stack Overflow answers, with particular emphasis on the sorting-based traversal counting algorithm marked as the best answer in Answer 3.

Problem Description

Given an array containing duplicate elements, such as: ["a","b","c","d","d","e","a","b","c","f","g","h","h","h","e","a"], the objective is to count the occurrences of each element, producing output in the form: a:3, b:2, c:2, etc.

Core Algorithm Analysis

Sorting-Based Traversal Counting

The algorithm proposed in Answer 3 implements counting through sorting followed by traversal:

function countDuplicates() {
    const array_elements = ["a", "b", "c", "d", "e", "a", "b", "c", "f", "g", "h", "h", "h", "e", "a"];
    
    array_elements.sort();
    
    let current = null;
    let cnt = 0;
    
    for (let i = 0; i < array_elements.length; i++) {
        if (array_elements[i] !== current) {
            if (cnt > 0) {
                console.log(current + " comes --> " + cnt + " times");
            }
            current = array_elements[i];
            cnt = 1;
        } else {
            cnt++;
        }
    }
    
    if (cnt > 0) {
        console.log(current + " comes --> " + cnt + " times");
    }
}

Algorithm Step Analysis:

  1. Sorting Phase: Use array_elements.sort() to sort the array lexicographically, grouping identical elements together
  2. Variable Initialization: current records the element currently being counted, cnt records the count of the current element
  3. Traversal and Counting: Traverse the sorted array, output the count of the previous element when encountering a new element, and start a new count
  4. Boundary Handling: Process the output of the last element after the loop ends

Time Complexity Analysis

The time complexity of this algorithm is primarily determined by the sorting operation:

Alternative Method Comparison

Object-Based Counting Using forEach

Answer 1 and Answer 2 propose object property-based counting methods:

const uniqueCount = ["a", "b", "c", "d", "d", "e", "a", "b", "c", "f", "g", "h", "h", "h", "e", "a"];
const count = {};
uniqueCount.forEach(function(i) {
    count[i] = (count[i] || 0) + 1;
});
console.log(count);

Method Characteristics:

Traditional for Loop Implementation

For compatibility with older browsers, use traditional for loops:

const uniqueCount = ["a", "b", "c", "d", "d", "e", "a", "b", "c", "f", "g", "h", "h", "h", "e", "a"];
const count = {};
for (let i = 0; i < uniqueCount.length; i++) {
    const item = uniqueCount[i];
    count[item] = (count[item] || 0) + 1;
}
console.log(count);

Performance Optimization Considerations

Memory Usage Optimization

Object-based counting methods are more memory-efficient, especially when dealing with large arrays. The sorting method requires additional O(n) space for the sorting operation.

Browser Compatibility

For scenarios requiring support for older browsers, avoid using arrow functions and const/let declarations, and use var and function declarations instead.

Practical Application Scenarios

Data Statistical Analysis

Element frequency counting is common in data preprocessing stages, useful for:

Algorithm Optimization Foundation

Element counting serves as the foundation for many complex algorithms, such as:

Extended Considerations

Handling Complex Data Types

When array elements are objects, custom comparison functions are required:

const objectsArray = [{id: 1}, {id: 2}, {id: 1}, {id: 3}];
const countMap = new Map();

objectsArray.forEach(obj => {
    const key = JSON.stringify(obj);
    countMap.set(key, (countMap.get(key) || 0) + 1);
});

console.log(Object.fromEntries(countMap));

Utilizing Modern JavaScript Features

ES6 introduced Map data structure, which is more suitable as a counter:

const uniqueCount = ["a", "b", "c", "d", "d", "e", "a", "b", "c", "f", "g", "h", "h", "h", "e", "a"];
const countMap = new Map();

uniqueCount.forEach(item => {
    countMap.set(item, (countMap.get(item) || 0) + 1);
});

console.log(Object.fromEntries(countMap));

Conclusion

This paper provides a detailed analysis of various methods for counting duplicate elements in JavaScript arrays. While the sorting-based traversal counting algorithm has higher time complexity, it still holds value in specific scenarios. For most application scenarios, object-based or Map-based counting methods demonstrate better performance and code simplicity. Developers should choose the appropriate implementation based on specific requirements.

Copyright Notice: All rights in this article are reserved by the operators of DevGex. Reasonable sharing and citation are welcome; any reproduction, excerpting, or re-publication without prior permission is prohibited.