Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Why isn't lodash's _.unique returning unique objects when I pluck a field that is an object?

I'm using lodash's _.unique and it's not working as expected. I'm doing this:

uniqueByFocusIndex = _.unique(clickables, false, "focusIndex");

And as you can see in the image (look at the right), it's returning two elements with the same values for their focusIndexes. I'd expect this to return one of the two, not both. Is it because _.unique only works on primitives and not objects?

Click to expand: enter image description here

like image 672
Daniel Kaplan Avatar asked Dec 11 '22 04:12

Daniel Kaplan


2 Answers

_.uniqWith is what you might need so that you can do comparison using _.isEqual

_.uniqWith(clickables, _.isEqual)

It is suggested in the docs

like image 159
Aizzat Suhardi Avatar answered Jan 18 '23 23:01

Aizzat Suhardi


It doesn't work because comparing objects is done by reference and returns false even if the objects' contents are the same.

Using a string for the callback will check those values using the pluck callback style, but comparison of those objects you have under that key will always be false.

I tried to find a way to do this with some other callback, but I think you would be better off just writing your own uniq function that fits your purposes.

like image 35
Mosho Avatar answered Jan 19 '23 00:01

Mosho