We'll dive deeper into existential questions of equality and truth in part 2. We've been taking for granted that the functions we've been using have implicit tests of equality that may not necessarily match what we expect from what 'equality' means between array elements. Speaking of assumptions, we've been talking about deduplication but neglecting to consider the elephant in the room: what does it mean for something to be a duplicate of another? In other words: what makes something different from another? One would have assumed that deduplication is such a simple task that it's such a surprise not to get the expected answer. Now we get something different, but still is definitely not what we can consider as the 'correct' result. Object.keys(arr.reduce((acc, cur) => (acc = cur & acc), ) => arr.filter((e) => !(t = e in t)) In each iteration, check if the item is already included in the accumulator using the includes() method. Prints the modified array, now containing only unique elements. Updates the array with unique elements, modifying the size. Use set to collect unique elements from the array. UsingFilter: (arr) => arr.filter((e, i, a) => a.indexOf(e) = i), To remove duplicates using the reduce() method, you need to declare an array as the accumulator value. Approach using Set : By using set to remove duplicates from an input array and update the array with unique elements and finally return the count of unique elements.