Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save jCrip/8880d59157efe475ca12666a2f614516 to your computer and use it in GitHub Desktop.
Save jCrip/8880d59157efe475ca12666a2f614516 to your computer and use it in GitHub Desktop.
Javascript: Count duplicates in an array
/**
Problem:
You have a javascript array that likely has some duplicate values and you would like a count of those values.
Solution:
Try this schnippet out.
*/
function compressArray(original) {
var compressed = [];
// make a copy of the input array
var copy = original.slice(0);
// first loop goes over every element
for (var i = 0; i < original.length; i++) {
var myCount = 0;
// loop over every element in the copy and see if it's the same
for (var w = 0; w < copy.length; w++) {
if (original[i] == copy[w]) {
// increase amount of times duplicate is found
myCount++;
// sets item to undefined
delete copy[w];
}
}
if (myCount > 0) {
var a = new Object();
a.value = original[i];
a.count = myCount;
compressed.push(a);
}
}
return compressed;
};
// It should go something like this:
var testArray = new Array("dog", "dog", "cat", "buffalo", "wolf", "cat", "tiger", "cat");
var newArray = compressArray(testArray);
/*
console: [
Object { value="dog", count=2},
Object { value="cat", count=3},
Object { value="buffalo", count=1},
Object { value="wolf", count=1},
Object { value="tiger", count=1}
]
*/
@drgullin
Copy link

drgullin commented Feb 1, 2019

ES6 faster alternative:

const getDuplicatesCount = array => {
    let duplicatesCount = {}

    for (index in array) {
        if (duplicatesCount[array[index]]) {
            duplicatesCount[array[index]]++
        } else {
            duplicatesCount[array[index]] = 1
        }
    }
    
    return Object.keys(duplicatesCount).map(value => ({
        value,
        count: duplicatesCount[value]
    }))
}

const testArray = new Array("dog", "dog", "cat", "buffalo", "wolf", "cat", "tiger", "cat")
const newArray = getDuplicatesCount(testArray)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment