Skip to content

Instantly share code, notes, and snippets.

@chenzitw
Last active September 24, 2019 08:30
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save chenzitw/db799485a338ed9f12d5d08faa939117 to your computer and use it in GitHub Desktop.
Save chenzitw/db799485a338ed9f12d5d08faa939117 to your computer and use it in GitHub Desktop.
isArrayDuplicated.js
function isArrayDuplicated (array, ...getters) {
if (!Array.isArray(array) || getters.some(getter => typeof getter !== 'function')) {
return
}
const preGetters = [...getters]
const lastGetter = preGetters.pop()
const result = array.reduce((temp, wantedItem) => {
if (temp === true || temp === undefined) return temp
const slot = preGetters.reduce((t, getter) => {
if (t === undefined) return
if (!['number', 'string'].includes(typeof getter(wantedItem))) return
if (t[getter(wantedItem)] === undefined) t[getter(wantedItem)] = []
return t[getter(wantedItem)]
}, temp)
if (slot === undefined) return
if (slot[lastGetter(wantedItem)] !== undefined) return true
slot[lastGetter(wantedItem)] = true
return temp
}, [])
return (result === true || result === undefined) ? result : false
}
const result = isArrayDuplicated(
[
{ a: 3, b: 2, c: {d: 4}, e: 'do', f: 'not', g: 'care' },
{ a: 2, b: 2, c: {d: 4}, e: 'do', f: 'not', g: 'care' },
{ a: 3, b: 2, c: {d: 3}, e: 'do', f: 'not', g: 'care' },
{ a: 2, b: 4, c: {d: 4}, e: 'do', f: 'not', g: 'care' }
],
o => o.a,
o => o.b,
o => o.c.d
)
console.log(result)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment