去重总结

去重的一些方法拓展

1
//[1,1,'1',undefined,undefined,null,null,{aa:1},{aa:1},new String(1),new Number(1)]
// [1, '1', undefined, null, Object, Object, String, Number] 
let unique = arr => {
	arr.forEach(item => {
		res.indexOf(item) == -1 && res.push(item)
	}, res = [])
	return res 
}

//[1,1,'1',undefined,undefined,null,null,{aa:1},{aa:1},new String(1),new Number(1)]
// [1, "1", undefined, null, Object, Object, String, Number]
let unique = arr => {
	return arr.filter((item, index) => {
		return index <= arr.indexOf(item)
	}) 
}

let unique = arr => {
	return arr.filter((item, index, res) => {
		return index == res.indexOf(item)
	})
}

//[1,1,'1',undefined,undefined,null,null,{aa:1},{aa:1},new String(1),new Number(1)]
// [1, "1", undefined, null, Object, Object, String, Number]
let unique = Array.from(new Set(arr))

let unique = arr => [...new Set(arr)]

function unique(arr) {
	var res = []
	for(Var i = 0, len = arr.length; i< len; i++){
		var item = arr[i]

		for(var j = 0, jlen = res.length; i < jlen; j++) {
			if(res[j] === item)
				break
		}
		if(j === jlen) {
			res.push(item)
		}
	}
	return res
}

function unique(arr) {
	var res = []
	for(var i = 0, len = arr.length; i < len; i++) {
		var item = arr[i]
		(res.indexOf(item) === -1) && res.push(item)
	}
	return res
}

function unique(arr) {
	var res = arr.filter((item, index, arr) =>{
		return arr.indexOf(item) === index
	})
	return res
}

function unique(arr) {
	var res = []
	for(var i = 0, len = arr.length; i< len; i++) {
		for(Var j = i+ 1; j < len; j++) {
			if(a[i] === a[j]) {
				j = ++i
			}
		}
		res.push(a[i])
	}
	return res 
}

//用对象来做哈希 把item存到key中, 缺点 不能区别 1 “1”
function unique(arr) {
	var hash = {}
	return arr.filter(item => {
		return hash.hasOwnProperty(item) ? false : (hash[item] = true)
	}) 
}

// 如果数组元素全部是基础类型的 Number 值,键值对法应该是最高效的!
//[1,1,'1',undefined,undefined,null,null,{aa:1},{aa:1},new String(1),new Number(1)]
// [1, "1", undefined, null, Object, String]
function unique(arr) {
	var res = []
	var hash = {}

	for(var i = 0,len = arr.length; i < len; i++) {
		var item = arr[i]
		var key = typeof(item) + item
		if(hash[key] !== 1) {
			res.push(item)
			hash[key] = 1
		}
	}

	return res
}

// [1, "1", undefined, null, Object, Object, String, Number]
function unique(arr) {
	var primsA = {"boolean": {}, "number": {}, "string": {}, "object": {}},
		primsB = {"[object Number]": {}, "[object String]": {}}
		objs = []

	return arr.filter(item => {
		var typeA = typeof item 
		var typeB = Object.prototype.toString.call(item)
		if(typeA in primsA)
			return primsA[typeA].hasOwnProperty(item) ? false : (primsA[typeA][item] = true)
		else if(typeB in primsB)
			return primsB[typeB].hasOwnProperty(item) ? false : (primsB[typeB][item] = true)
		else
			return objs.indexOf(item) >= 0 ? false : objs.push(item)
	}) 
}


function unique(arr, key) {
	var seen = {}
	return arr.filter(item => {
		var k = key(item)
		return seen.hasOwnProperty(k) ? false : (seen[k] = true)
	}) 
}

function unique(arr, key) {
	var index = []
	return a.filter(item => {
		var k = key(item)
		return index.indexOf(k) >= 0 ? false : index.push(k)
	})
}

function unique(arr, key) {
	var seen = new Set()
	return arr.filter(item => {
		var k = key(item)
		return seen.has(k) ? false : seen.add(k)
	})
}


// unique([{a:{b:1}}, {a:{b:1}}])
// [Object]
// unique([{a:1},{a:1},{a:2},new String(1), new String(1), new Number(1),new String(2),new Number(1), new Number(2), {a:2}])
// [Object, Object, String, Number, String, Number]
// 判断对象好像可以
function unique(arr) {
	var primsA = {"boolean": {}, "number": {}, "string": {}},
		primsB = {"[object Number]": {}, "[object String]": {}},
		primsC = {"[object Object]": {}},
		objs = [];

	return arr.filter(item => {
		var typeA = typeof item 
		var typeB = Object.prototype.toString.call(item)
		if(typeA in primsA){
			return primsA[typeA].hasOwnProperty(item) ? false : (primsA[typeA][item] = true)
		}
		else if(typeB in primsB){
			return primsB[typeB].hasOwnProperty(item) ? false : (primsB[typeB][item] = true)
		}
		else if(typeB in primsC){
			item = JSON.stringify(item)
			return primsC[typeB].hasOwnProperty(item) ? false : (primsC[typeB][item] = true)
		}
		else{
			return objs.indexOf(item) >= 0 ? false : objs.push(item)
		}
			
	}) 
}