数组去重方法
1、for循环+findIndex
主要利用findIndex的特性,查找元素找不到返回-1,如果是-1就说明没找到,就往数组里添加新元素。
const arr = [1,2,3,4,5,6,4,3,8,1]
let newArr = []
function newArrFn (arr) {
for(let i = 0;i<arr.length;i++){
newArr.indexOf(arr[i]) == -1?newArr.push(arr[i]):newArr
}
return newArr
}
console.log(newArr(arr)) //[1,2,3,4,5,6,8]
2、双重for循环
const arr = [1,2,3,4,5,6,4,3,8,1]
function newArrFn(arr) {
let newArr = []
for(let i = 0;i<arr.length;i++){
const flag = true;
for(let j=0;j<newArr.length;j++){
arr[i] === newArr[j] ? flag = false : flag
};
flag?newArr.push(arr[i]):newArr
}
return newArr
}
console.log(newArr(arr)) //[1,2,3,4,5,6,8]
3、sort排序
首先利用sort方法进行排序循环,如果原数组的第i项和新数组的i-1项不一致,就push进去。
const arr = [1,2,3,4,5,6,4,3,8,1]
function newArrFn(arr){
arr = arr.sort()
let newArr = []
for(let i = 0;i<arr.length;i++){
arr[i] === arr[i-1] ? newArr:newArr(arr[i])
}
return newArr
}
console.log(newArr(arr)) //[1,2,3,4,5,6,8]
4、Set
Set最大的特点是数据不重复。set函数可以接受一个数组作为参数来初始化,利用该特性给数组去重。
const arr = [1,2,3,4,5,6,4,3,8,1]
function newArr(arr){
return ([...new Set(arr)])
}
console.log(newArr(arr)) //[1,2,3,4,5,6,8]
5、set+Array.from
const arr = [1,2,3,4,5,6,4,3,8,1]
function newArr(arr){
return(Array.from(new Set(arr)))
}
console.log(newArr(arr)) //[1,2,3,4,5,6,8]
6、filter+indexOf
indexOf可以检测一个元素在数组中出现的位置,找到返回该元素的下标,找不到返回-1
const arr = [1,2,3,4,5,6,4,3,8,1]
fuction newArr(arr){
return arr.filter((item,index){
return arr.indexOf(item) === index
})
}
console.log(newArr(arr)) //[1,2,3,4,5,6,8]
filter用于对数组进行过滤。他创建一个新数组,新数组中的元素通过检查指定数组中符合条件的所有元素。 filter()不会对空数组进行检测,不改变原数组。
Array.filtrt(function(currentValue,index,arr),thisValue)
const nums = [1,2,3,4,5,6,7,8,9,10];
const res = nums.filter(num=>{
return num > 5;
})
console.log(res); //[6,7,8,9,10]
7、includes
利用includes检查新数组是否包含原数组的每一项。如果不包含就push进去
const arr = [1,2,3,4,5,6,4,3,8,1]
function newArrFn(arr){
let newArr = []
for(let i = 0;i<arr.length;i++){
newArr.includes(arr[i]) ? newArr : newArr.push(arr[i])
}
return newArr
}
console.log(newArr(arr)) //[1,2,3,4,5,6,8]
8、for+object
利用对象属性名不能重复这一特点。如果对象不存在,就push进去
const arr = [1,2,3,4,5,6,4,3,8,1]
const newArr = []
function newArrFn(arr){
const 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(newArr(arr)) //[1,2,3,4,5,6,8]
9、for+splice
const arr = [1,2,3,4,5,6,4,3,8,1]
function newArrFn(arr){
for(let i = 0;i<arr.length;i++){
for(let j = 0;j<arr.length;j++){
if(arr[i] === arr[j]){
arr.splice(j,1)
j--
}
}
}
return arr
}
console.log(newArr(arr)) //[1,2,3,4,5,6,8]