arr-diff icon indicating copy to clipboard operation
arr-diff copied to clipboard

Smaller/more performant?

Open jimmywarting opened this issue 4 years ago • 2 comments

I was thinking maybe it could be possible to use Set instead to do the same thing... A benchmark for it maybe?

var a = ['a', 'b', 'c', 'd'];
var b = ['b', 'c'];

var set = new Set(a)
b.forEach(a => set.delete(a))
Array.from(set) // => ['a', 'd']

Also in many situations it's wasteful to cast the set into an array... ppl only do it to keep the same signature and never used set in the first place

curious to see a benchmark for this native solution

jimmywarting avatar Sep 26 '21 18:09 jimmywarting

Also in many situations it's wasteful to cast the set into an array... ppl only do it to keep the same signature and never used set in the first place

@jimmywarting so do you want to add another function which you call like this:

anotherDiffFn(setToRemoveValuesFrom, arrayOfThingsToRemove)

?

ChocolateLoverRaj avatar Apr 24 '22 19:04 ChocolateLoverRaj

I was thinking more in terms of:

// index.js
export default function diff (a, b) {
  const set = new Set(a)
  b.forEach(a => set.delete(a))
  return set
}
import diff from 'arr-diff'

var a = ['a', 'b', 'c', 'd']
var b = ['b', 'c']

console.log(diff(a, b))
//=> Set(2) {'a', 'b'}

doe it would be breaking change...

jimmywarting avatar Apr 24 '22 20:04 jimmywarting