Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Get all non-unique values (i.e.: duplicate/more than one occurrence) in an array

I need to check a JavaScript array to see if there are any duplicate values. What's the easiest way to do this? I just need to find what the duplicated values are - I don't actually need their indexes or how many times they are duplicated.

I know I can loop through the array and check all the other values for a match, but it seems like there should be an easier way.

Similar question:

  • Get all unique values in a JavaScript array (remove duplicates)
like image 704
Scott Saunders Avatar asked May 08 '09 16:05

Scott Saunders


People also ask

How do you find multiple duplicates in array?

function checkIfArrayIsUnique(myArray) { for (var i = 0; i < myArray. length; i++) { for (var j = 0; j < myArray. length; j++) { if (i != j) { if (myArray[i] == myArray[j]) { return true; // means there are duplicate values } } } } return false; // means there are no duplicate values. }

How do you find duplicate values in an array of objects using Lodash?

To get duplicate values from an array with Lodash, we can use the countBy method to count the values. Then we call the JavaScript array's reduce method to get all the items that has count more than 1 and put them in an array.


2 Answers

You could sort the array and then run through it and then see if the next (or previous) index is the same as the current. Assuming your sort algorithm is good, this should be less than O(n2):

const findDuplicates = (arr) => {    let sorted_arr = arr.slice().sort(); // You can define the comparing function here.     // JS by default uses a crappy string compare.    // (we use slice to clone the array so the    // original array won't be modified)    let results = [];    for (let i = 0; i < sorted_arr.length - 1; i++) {      if (sorted_arr[i + 1] == sorted_arr[i]) {        results.push(sorted_arr[i]);      }    }    return results;  }    let duplicatedArray = [9, 9, 111, 2, 3, 4, 4, 5, 7];  console.log(`The duplicates in ${duplicatedArray} are ${findDuplicates(duplicatedArray)}`);

In case, if you are to return as a function for duplicates. This is for similar type of case.

Reference: https://stackoverflow.com/a/57532964/8119511

like image 180
swilliams Avatar answered Sep 23 '22 17:09

swilliams


If you want to elimate the duplicates, try this great solution:

function eliminateDuplicates(arr) {   var i,       len = arr.length,       out = [],       obj = {};    for (i = 0; i < len; i++) {     obj[arr[i]] = 0;   }   for (i in obj) {     out.push(i);   }   return out; }  console.log(eliminateDuplicates([1,6,7,3,6,8,1,3,4,5,1,7,2,6]))

Source: http://dreaminginjavascript.wordpress.com/2008/08/22/eliminating-duplicates/

like image 22
rapfaria Avatar answered Sep 19 '22 17:09

rapfaria