Last active
September 24, 2019 08:30
-
-
Save chenzitw/db799485a338ed9f12d5d08faa939117 to your computer and use it in GitHub Desktop.
isArrayDuplicated.js
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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