一.简单的数组去重
- ES6 Set去重
function unique(arr){
return Array.from(new Set(arr))
}
var arr = [1,1,'true','true',true,true,15,15,false,false, undefined,undefined, null,null, NaN, NaN,'NaN', 0, 0, 'a', 'a',{},{}];
console.log(unique(arr))
//[1, "true", true, 15, false, undefined, null, NaN, "NaN", 0, "a", {…}, {…}]
- 嵌套for循环,然后用splice去重(ES5)
function unique(arr){
for(var i=0
for(var j=i+1
if(arr[i] == arr[j]){
arr.splice(j,1)
j--
}
}
}
return arr
}
var arr = [1,1,'true','true',true,true,15,15,false,false, undefined,undefined, null,null, NaN, NaN,'NaN', 0, 0, 'a', 'a',{},{}]
console.log(unique(arr))
//[1, "true", 15, false, undefined, NaN, NaN, "NaN", "a", {…}, {…}]
- 利用indexOf去重
function unique(arr){
if(!Array.isArray(arr)){
console.log('type error!')
return
}
var array = [];
for(var i=0;i<arr.length;i++){
if(array.indexOf(arr[i]) === -1){
array.push(arr[i])
}
}
return array;
}
var arr = [1,1,'true','true',true,true,15,15,false,false, undefined,undefined, null,null, NaN, NaN,'NaN', 0, 0, 'a', 'a',{},{}];
console.log(unique(arr))
- 利用sort()
function unique(arr){
if(!Array.isArray(arr)){
console.log('type error!')
return
}
arr = arr.sort()
var array = [arr[0]];
for(var i=1;i<arr.length;i++){
if(arr[i] !== arr[i-1]){
array.push(arr[i])
}
}
return array;
}
var arr = [1,1,'true','true',true,true,15,15,false,false, undefined,undefined, null,null, NaN, NaN,'NaN', 0, 0, 'a', 'a',{},{}];
console.log(unique(arr))
//[0, 1, 15, NaN, NaN, "NaN", {…}, {…}, "a", false, null, "true", true, undefined]
- 利用includes
function unique(arr){
if(!Array.isArray(arr)){
console.log('type error!')
return
}
var array=[];
for(var i=0;i<arr.length;i++){
if(!array.includes(arr[i])){ //ncludes 检测数组是否有某个值
array.push(arr[i]);
}
}
return array;
}
var arr = [1,1,'true','true',true,true,15,15,false,false, undefined,undefined, null,null, NaN, NaN,'NaN', 0, 0, 'a', 'a',{},{}];
console.log(unique(arr))
//[1, "true", true, 15, false, undefined, null, NaN, "NaN", 0, "a", {…}, {…}]
- 利用filter
function unique(arr){
return arr.filter((item,index,arr) => {
return arr.indexOf(item,0) === index;
})
}
var arr = [1,1,'true','true',true,true,15,15,false,false, undefined,undefined, null,null, NaN, NaN,'NaN', 0, 0, 'a', 'a',{},{}];
console.log(unique(arr))
//[1, "true", true, 15, false, undefined, null, "NaN", 0, "a", {…}, {…}]
- 利用[...new Set(arr)]
二.引用类型(对象)去重
- 数组对象去重
var arr = [{
name: "ZYTX",
age: 20,
gender: "女"
}, {
name: "ZHLY",
age: 19,
gender: "男"
}, {
name: "ZDHG",
age: 19,
gender: "女"
}, {
name: "ZYTX",
age: 20,
gender: "女"
}]
var hash = {}
arr = arr.reduce((item,next) => {
hash[next.name]?'':hash[next.name] = true && item.push(next)
return item
},[])
console.log(arr)
- 数组对象去重函数写法
function unique(arr){
let obj = {}
let newArr = []
for(let i=0
obj[arr[i].name]?'':obj[arr[i].name] = true && newArr.push(arr[i])
}
return newArr
}
- 利用filter(ES5实现)
function unique(arr){
let res = []
for (let i = 0; i < arr.length; i++) {
const item = arr[i]
if (res.filter(ele => ele.id === item.id).length === 0) {
res.push(item)
}
}
return res
}
function unique(arr){
var res = arr.filter((item,index,array)=>{
return arr.indexOf(item) === index
})
return res
}
三.数组对象去重排序
let arr = [{id:1}, {id:4}, {id:1}, {id:3}, {id:10}]
let obj = {}
let newArr = arr.reduce((pre, cur) => {
obj[cur.id] ? '' : (obj[cur.id] = true && pre.push(cur))
return pre
}, [])
console.log(newArr)
newArr.sort((a,b) => {
return a.id - b.id
})
console.log(newArr)