//数组的去重方法
let arr = [1,2,2,2,5,2,6,3,3]
//第二种:利用map和indexOf,map是符合条件的返回true,不是则返回false
//所以用一个新数组去装符合条件的数
let ret = [];
arr.map((item)=>{
if(ret.indexOf(item) === -1){
ret.push(item);
}
})
// console.log(ret);
//第三种:filter和indexOf,filter返回的是符合条件的数
//indexOf() 方法可返回某个指定的字符串值在字符串中首次出现的位置。
//如果没有找到匹配的字符串则返回 -1。
//注意: indexOf() 方法区分大小写。
let result = arr.filter((item,index)=>{
return arr.indexOf(item) === index;
})
// console.log(result);
//第四种:set方法:集合
//ES6引入的
//利用set集合需要用Array.from将集合转化为数组类型
//也可以利用Set对象配合扩展运算符 …来进行数组去重。
let setResult = Array.from(new Set(arr))
let setResult1 = [...new Set(arr)]
console.log('set',setResult);
console.log('set2',setResult1);
//第五种:forEach和includes
//ES2016引入的includes
//判断是否包含某个元素
let inRet = [];
arr.forEach((item)=>{
if(!inRet.includes(item)){
inRet.push(item);
}
})
console.log('includes',inRet);
//第六种:相邻元素去重
//先用sort()对数组进行排序,然后比较相邻两个元素
let retX = [];
arr.sort();
for(let i = 0;i < arr.length;i++){
if(arr[i] !== arr[i+1]){
retX.push(arr[i])
}
}
console.log(retX);
//第七种:利用对象属性去重
//创建空对象,遍历数组,将数组中的值设为对象的属性,
//并给该属性赋初始值1,每出现一次,对应的属性值增加1,
//这样,属性值对应的就是该元素出现的次数了
let res = [],obj = {};
for (let i = 0; i < arr.length; i++) {
if (!obj[arr[i]]) {
res.push(arr[i])
obj[arr[i]] = 1
} else {
obj[arr[i]]++
}
}
console.log(obj);
// console.log('对象',res);
//第一种:双循环
let retS = [];
let flag;
for(let i = 0;i < arr.length;i++){
falg = false;
for(let j = i + 1;j < arr.length;j++){
if(arr[i] === arr[j]){
falg = true;
break;
}
}
if(!falg){
retS.push(arr[i]);
}
}
// console.log('双循环1',retS);
//第一种:双循环法和splice
for(let i = 0;i < arr.length;i++){
for(let j = i + 1;j < arr.length;j++){
if(arr[i] == arr[j]){
//如果arr[i]==arr[j],则用splice删除arr[j]
arr.splice(j,1);
//因为删除了arr[j]所以索引减一才能比较所有的数,如果不减会遗漏一位数
j -= 1;
}
}
}
// console.log(arr);
console