一个老生常淡的js基础问题,根据自己的理解,再次整理一下
1.双重for循环
function ArrayDeduplication(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)
}
}
}
return arr
}
2.新数组 + indexOf
function ArrayDeduplication2(arr){
// 新建一个数组
let newArr = []
// 遍历原数组
arr.forEach((item) => {
// 判断新数组中是否有原数组中的值
// 如果没有,则添加
if(newArr.indexOf(item) === -1){
newArr.push(item)
}
});
return newArr
}
3. filter + indexOf
function ArrayDeduplication3(arr){
// 通过filter函数过滤,数组的indexOf与当前的索引是否一致
// 如一致,则过滤掉
let newArr = arr.filter((item,index) => arr.indexOf(item) === index)
return newArr
}
4.es6新方法
function ArrayDeduplication4(arr){
// es6新增的方法
// 也可以
// return Array.from(new Set(arr))
return [...new Set(arr)]
}