去重的一些方法拓展
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) } }) } |