JSFiddle - React, Tailwind, and code Playground

by prometh

JavaScript

function unique(arr) {
	var key = "____uniqueKey";
	var stringsNumbers = {};
	var objects = [];
	var unique = [];
	
	arr.forEach( function(value) {
		switch (typeof value) {
			case "object": {
				if ( !value[key] ) {
					value[key] = true;
					objects.push(value);
					unique.push(value);
				}
				
				break;
			}
			default: {
				if ( !stringsNumbers[value] ) {
					stringsNumbers[value] = true;
					unique.push(value);
				}
			}
		}
	});
	
	objects.forEach( function(object) {
		delete object[key];
	});
	
	return unique;
}

var o1 = {name:"foo1"};
var o2 = {name:"foo2"};

console.log( unique(["foo","bar","foo"]) );	//=> ["foo", "bar"]
console.log( unique([o1, o1]) );			//=> [o1]
console.log( unique(["foo",o1, o1, o2]) );	//=> ["foo", o1, o2]) );