1.filter()和indexOf()实现去重
let list = [2, 3, 3, 45, 34, 3, 4, 3, 4, 3, 4, 3, 34]
// 数组名.filter() 过滤\遍历
// 参数:item 数据中的每一个对象,index数据中的每一个对象的下表啊,array整个数组
let num = list.filter((item, index, array) => {
// array.indexOf() 只会查找对应数据的第一个数据的下标
// 判断每一个数据是否和原数组中的数据相同
return array.indexOf(item) === index
})
console.log(num)
2.reduce()和includes()实现去重
let list = [2, 3, 3, 45, 34, 3, 4, 3, 4, 3, 4, 3, 34]
// reduce 累加,遍历
let num = list.reduce((unique, item) => {
// 判断一个数组中是否有这个属性 有则返回true 否则返回false
return unique.includes(item) ? unique : [...unique, item]
}, [])
console.log(num)
3.reduce第二种方式实现去重
//第一个参数为初始值, 或者计算结束后的返回值。
//第二个参数,当前元素 !!
//ps:reduce里面有一定要return,return出去的值也要注意
var arr=[1,2,3,4,5,6,6,5,4,3,2,1]
function Array(arr){
let newArr=[]
return arr.reduce((prev,next,index,arr)=>{
//如果包含,就返回原数据,不包含,就是把新数据追加进去
return newArr.includes(next)?newArr.push(next)
},0)
}
console.log(Array(arr))
4.includes方式
//利用了includes检查新数组是否包含原数组的每一项。如果不包含,就push进去。
//includes()方法用来判断一个数组是否包含一个指定的值,如果是返回 true,否则false
var arr=[1,2,3,4,5,6,6,5,4,3,2,1]
function Array(arr){
let newArr=[]
for(let i=0;i<arr.length;i++){
newArr.includes(arr[i])?newArr:newArr.push(arr[i])
}
return newArr
}
console.log(Array(arr))
5.new set() array.from() 通过es6中的set方法 再用array.from()在将set格式转化为数组格式
let a = [2, 3, 54, 4, 3, 4, 3, 4, 3, 433, 4, 132]
let arr = Array.from(new Set(a))
console.log(arr)
6.for + object
//利用对象属性名不能重复的特性,如果对象中不存在,就可以给push进去。
var arr=[1,2,3,4,5,6,6,5,4,3,2,1]
function Array(arr){
let newArr=[]
let obj={}
for(let i=0;i<arr.length;i++){
if(!obj[arr[i]]){
newArr.push(arr[i])
obj[arr[i]]=1
}else{
obj[arr[i]]++
}
};
return newArr
}
console.log(Array(arr))
7.new Map()方法
//Map遍历整个数组,对里面的每个值做处理再返回一个新的值 利用数据结构存值的特点
var arr=[1,2,3,4,5,6,6,5,4,3,2,1]
function Array(arr){
let newArr=[]
let map=new Map()
for(let i=0;i<arr.length;i++){
if(!map.has(arr[i])){
map.set(arr[i],true)
newArr.push(arr[i])
}
};
return newArr
}
console.log(Array(arr))
8.for循环+findlndex方式去重
//该方法是利用了findlndex的特性,查找元素时,未找到返回-1,接下来就需要进行判断,如果是-1,说明没有找到,就往新数组添加元素。
var arr=[1,2,3,4,5,6,6,5,4,3,2,1]
function Array(arr){
let newarr=[]
for(let i=0; i<arr.length;i++){
newarr.indexof(arr[i]===-1?newarr.push(arr[i])):newarr
};
return newarr
}
console.log(Array(arr))
9.双重for循环 + splice() 或 双重for循环 + push() (ES5的方法)
function list(arr) {
// 遍历数组中的所有的元素
for (var i = 0; i < arr.length; i++) {
for (var v = i + 1; v < arr.length; v++) {
// 检查是否有重复的元素
if (arr[i] === arr[v]) {
// 有,就从数组中去除
arr.splice(v, 1);
// splice方法会改变数组长度,所以要将数组长度len和下标 v 减 1
length--;
v--
}
}
}
return arr
}
let a = [2, 3, 54, 4, 3, 4, 3, 4, 3, 433, 4, 132]
console.log(list(a))