re: Handling Array Duplicates Can Be Tricky VIEW POST

FULL DISCUSSION
 

there is also this:

const arrayWithoutDuplicates = Array.from(new Set(arrayWithDuplicates))

 

Have tried set to find uniques in a simple array and it works great, but would this work if its a nested array, an array of objects or multi dimensional arrays?

 

since arrays and objects are reference type it may work in some cases, ex:

let x = {a: 1};
let y = [];

y.push(x);
y.push(x);

console.log(Array.from(new Set(y))); // will output [{a: 1}]

but if you want an array of objects with the same structure it wont work:

console.log(Array.from(new Set([{a: 1}, {a: 1}]))) // will output [{a:  1}, {a: 1}]

if you want to compare structures it will mostly depend on the kind of array you have, for example an array of database documents may be filtered based on _id or name:

let withoutDuplicates = [];

withDuplicates.forEach(doc => if (!withoutDuplicates.find(e => e.name === doc.name) withoutDuplicates.push(doc)));

in most cases the arrays items will have a predetermined format, it's very rare to need multi purpose duplicate remover, at least i didn't need one till now, it also may do some checks that aren't really necessary for what you want to do, which may be bad for performance, but may be helpful to speed up development.

This is interesting, passing objects with same reference vs passing same objects with different references.

Thanks for the explanation :)

 

Same question @Eshun Sharma :) This is the reason why the title says "tricky"

 

This way looks great, but slow on the large data set. I prefer the for loop.

code of conduct - report abuse