rambdax
Version:
Extended version of Rambda - a lightweight, faster alternative to Ramda
42 lines (32 loc) • 796 B
JavaScript
import { _indexOf } from '../equals.js'
import { type as typeMethod } from '../type.js'
export class _Set{
constructor(){
this.set = new Set()
this.items = {}
}
checkUniqueness(item){
const type = typeMethod(item)
if ([ 'Null', 'Undefined', 'NaN' ].includes(type)){
if (type in this.items){
return false
}
this.items[ type ] = true
return true
}
if (![ 'Object', 'Array' ].includes(type)){
const prevSize = this.set.size
this.set.add(item)
return this.set.size !== prevSize
}
if (!(type in this.items)){
this.items[ type ] = [ item ]
return true
}
if (_indexOf(item, this.items[ type ]) === -1){
this.items[ type ].push(item)
return true
}
return false
}
}