數組去重兩種思路:
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;
}
結束。。。