方法一:双重for循环 + splice()
思路:分别用第一层与第二层for循环控制前一个数与后一个数,判断前后是否相等,若结果为true,则用数组方法splice删除一个数,并修正数组下标。
// 1.双层for循环
var arr = [1,1,2,3,5,4,7,7,'hello','hello']
function unique(arr){
// 控制第一个数
for(let i = 0; i<arr.length; i++){
// 控制第二个数
for(let j = i+1; j<arr.length; j++){
// 判断前后是否相等
if(arr[i]===arr[j]){
// 用splice删除一个数,会修改原数组
arr.splice(j,1)
// 修正下标
j--;
}
}
}
return arr
}
console.log(unique(arr));
方法二:indexOf()
思路:先定义一个新数组来接收去重后的新数组,遍历原数组,若该元素在新数组中不存在,即indexOf 等于-1时,使用push方法将其添加入新数组中,最后返回这个新数组。
// 数组去重(indexOf)
var arr = [1,1,2,3,5,4,7,7,'hello','hello']
function unique(arr) {
var res = []
for (var i = 0; i < arr.length; i++) {
if (res.indexOf(arr[i]) == -1) {
res.push(arr[i])
}
}
return res
}
console.log(unique(arr));
方法三:lastindexOf()
思路:与indexOf方法一样,只是将indexOf改为lastindexOf。
var arr = [1,1,2,3,5,4,7,7,'hello','hello']
lastIndexOf()
function unique(arr){
let newarr = []
// lastIndexOf(要寻找的参数,要开始寻找的索引)
for(let i = 0; i<arr.length; i++){
if(newarr.lastIndexOf(arr[i])===-1){
newarr.push(arr[i])
}
}
return newarr;
}
console.log(unique(arr));
方法四:includes()
思路:先定义一个新数组来接收去重后的新数组,遍历原数组,判断原数组的元素在新数组中是否存在,若为false,则将其使用push方法添加进新数组,并返回新数组。
var arr = [1,1,2,3,5,4,7,7,'hello','hello']
// includes(元素值) 方法用来判断一个数组是否包含一个指定的值,如果是返回 true,否则false。
function unique(arr){
newarr = [];
for(let i = 0; i<arr.length; i++){
if(!newarr.includes(arr[i])){
newarr.push(arr[i]);
}
}
return newarr;
}
console.log(unique(arr));
方法五:forEach()+indexOf()
思路:先定义一个新数组来接收去重后的新数组,使用forEach方法遍历原数组,若该元素在新数组中不存在,即indexOf 等于-1时,使用push方法将其添加入新数组中,最后返回这个新数组。
var arr = [1,1,2,3,5,4,7,7,'hello','hello']
// forEach(遍历)+indexOf
function unique(arr){
let newArr = [];
arr.forEach(function(item){
if(newArr.indexOf(item) === -1){
newArr.push(item);
}
})
return newArr;
}
console.log(unique(arr));
方法六:filter()+indexOf()/includes()
思路:先定义一个新数组来接收去重后的新数组,利用 filter 过滤并配合 indexOf 查找元素最后返回这个新数组。
var arr = [1,1,2,3,5,4,7,7,'hello','hello']
// 用filter+indexOf/includes
function unique(arr){
let newArr = [];
return arr.filter(function(item){
return newArr.includes(item)?"":newArr.push(item)
})
return newArr;
}
console.log(unique(arr));
方法七:set()
思路:set是Es6提供的一种新的数据结构,类似于数组,但set里面的值不重复,也就是说值唯一,因此可以直接用来数组去重。
var arr = [1,1,2,3,5,4,7,7,'hello','hello']
// set去重 成员是唯一的
let set=new Set(arr);
console.log(set);