mobily/ts-belt

Add DifferenceWith

Opened this issue · 6 comments

Useful for array of objects

Could you describe it more specifically? for example, a signature for the function, and desired behavior.

It would accept a function like such https://ramdajs.com/docs/#differenceWith because difference works only with primitives.

I got this. but how about changing the name to differenceBy? all the other functions in ts-belt which take another comparing function use ~By in their names. I forgot zipWith. I committed a PR, please check it out to see if it meets your requirements.

maybe a 'a=>'b function for the compare function rather than ('a 'a) => bool would be better i guess? If it's a symmetric comparison, why not just evaluate a new value from its element?

//current implementation(which is same as ramda's signature)
A.differenceWith<{a:number}>([{a:1},{a:2}], [{a:1},{a:3}], ({a:x}, {a:y})=> x === y)
A.differenceWith([{a:1},{a:2}], [{a:1},{a:3}], F.equals) // which should work just same as A.difference
//proposed implementation
A.differenceWith<{a:number},number>([{a:1},{a:2}], [{a:1},{a:3}], D.getExn('a'))
A.differenceWith([{a:1},{a:2}], [{a:1},{a:3}], F.identity) // which should work just same as A.difference

this makes the third argument into a unary function, which works fluently with many other functions in ts-belt. the PR is written in ramda's signature, but let me know how do you think.

I don't think I have anything against the proposal

Great! PR updated!