You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							62 lines
						
					
					
						
							1.1 KiB
						
					
					
				
			
		
		
	
	
							62 lines
						
					
					
						
							1.1 KiB
						
					
					
				'use strict'; | 
						|
 | 
						|
// there's 3 implementations written in increasing order of efficiency | 
						|
 | 
						|
// 1 - no Set type is defined | 
						|
function uniqNoSet(arr) { | 
						|
	var ret = []; | 
						|
 | 
						|
	for (var i = 0; i < arr.length; i++) { | 
						|
		if (ret.indexOf(arr[i]) === -1) { | 
						|
			ret.push(arr[i]); | 
						|
		} | 
						|
	} | 
						|
 | 
						|
	return ret; | 
						|
} | 
						|
 | 
						|
// 2 - a simple Set type is defined | 
						|
function uniqSet(arr) { | 
						|
	var seen = new Set(); | 
						|
	return arr.filter(function (el) { | 
						|
		if (!seen.has(el)) { | 
						|
			seen.add(el); | 
						|
			return true; | 
						|
		} | 
						|
 | 
						|
		return false; | 
						|
	}); | 
						|
} | 
						|
 | 
						|
// 3 - a standard Set type is defined and it has a forEach method | 
						|
function uniqSetWithForEach(arr) { | 
						|
	var ret = []; | 
						|
 | 
						|
	(new Set(arr)).forEach(function (el) { | 
						|
		ret.push(el); | 
						|
	}); | 
						|
 | 
						|
	return ret; | 
						|
} | 
						|
 | 
						|
// V8 currently has a broken implementation | 
						|
// https://github.com/joyent/node/issues/8449 | 
						|
function doesForEachActuallyWork() { | 
						|
	var ret = false; | 
						|
 | 
						|
	(new Set([true])).forEach(function (el) { | 
						|
		ret = el; | 
						|
	}); | 
						|
 | 
						|
	return ret === true; | 
						|
} | 
						|
 | 
						|
if ('Set' in global) { | 
						|
	if (typeof Set.prototype.forEach === 'function' && doesForEachActuallyWork()) { | 
						|
		module.exports = uniqSetWithForEach; | 
						|
	} else { | 
						|
		module.exports = uniqSet; | 
						|
	} | 
						|
} else { | 
						|
	module.exports = uniqNoSet; | 
						|
}
 | 
						|
 |