数组去重两种思路:
1.在原有数组基础上进行去重
2.申请新的数组进行去重操作
原有数组上进行操作:
- es6 set方法去重
function unique(arr){
return Array.from(new Set(arr))
}
splice
直接去重
function unique2(arr){
for(let i=0;i<arr.length;i++){
for(let j=i+1;j<arr.length;j++){
if(arr[i]===arr[j]){
arr.splice(j,1)
j--
}
}
}
return arr
}
- 利用
hasOwnProperty
判断是否存在对象属性
function unique5(arr) {
let obj={}
return arr.filter(function (item,index,arr) {
return obj.hasOwnProperty(typeof item + item) ? false : (obj[typeof item+item]=true)
})
}
- 利用好filter去判断当前元素是否等于原始数组中出现的第一个索引值
function unique6(arr) {
return arr.filter(function (item,index,arr) {
return arr.indexOf(item,0)===index
})
}
申请新的数组去重操作
- indexOf判断
function unique1(arr) {
if(!Array.isArray(arr)){
return 0
}
let result=[];
for(let i=0;i<arr.length;i++){
if(result.indexOf(arr[i])===-1){
result.push(arr[i])
}
}
return result
}
- 排序,相邻进行操作
function unique3(arr){
if(!Array.isArray(arr)){
return 0
}
arr.sort((a,b)=>{
return a-b
});
let result=[arr[0]]
for(let i=1;i<arr.length;i++){
if(arr[i]!==arr[i-1]){
result.push(arr[i])
}
}
return result
}
- 利用对象的属性不能相同的特点进行去重
function unique4(arr) {
if(!Array.isArray(arr)){
return 0
}
let result=[]
let obj={}
for(let i=0;i<arr.length;i++){
if(!obj[arr[i]]){
result.push(arr[i])
obj[arr[i]]=1
}else{
obj[arr[i]]++
}
}
return result
}
- map数据结构去重
function unique7(arr) {
let map=new Map()
let result=new Array();
for(let i=0;i<arr.length;i++){
if(map.has(arr[i])){
map.set(arr[i],true)
}else{
map.set(arr[i],false)
result.push(arr[i])
}
}
return result;
}
结束。。。