|
|
- "use strict"
-
- function unique_pred(list, compare) {
- var ptr = 1
- , len = list.length
- , a=list[0], b=list[0]
- for(var i=1; i<len; ++i) {
- b = a
- a = list[i]
- if(compare(a, b)) {
- if(i === ptr) {
- ptr++
- continue
- }
- list[ptr++] = a
- }
- }
- list.length = ptr
- return list
- }
-
- function unique_eq(list) {
- var ptr = 1
- , len = list.length
- , a=list[0], b = list[0]
- for(var i=1; i<len; ++i, b=a) {
- b = a
- a = list[i]
- if(a !== b) {
- if(i === ptr) {
- ptr++
- continue
- }
- list[ptr++] = a
- }
- }
- list.length = ptr
- return list
- }
-
- function unique(list, compare, sorted) {
- if(list.length === 0) {
- return list
- }
- if(compare) {
- if(!sorted) {
- list.sort(compare)
- }
- return unique_pred(list, compare)
- }
- if(!sorted) {
- list.sort()
- }
- return unique_eq(list)
- }
-
- module.exports = unique
|