数组去重
对这个数组进行去重:var arr = [2,3,1,4,2,5,3,7,2];
方式一 indexOf()方法
/*
方式一:indexOf方法
原理是:
indexOf方法找到指定值时返回元素下标,未找到时返回-1。
过程:
定义一个空数组array,对这个空数组array使用indexOf()方法判断是不是存在指定元素
这个指定元素是外部数组中传进来的元素
array中不存在,返回-1,存在,则返回元素对应的下标
indexOf方法返回的值是-1时,将传进来的元素添加进这个array数组中
返回的值不是-1时,表示这个元素在array中已经存在,就不添加了
*/
function removeRepeat1(arr){
var array = new Array();
for(var i = 0; i<arr.length; i++){
if(array.indexOf(arr[i]) == -1){
array.push(arr[i]);
}
}
return array;
}
var result1 = removeRepeat1(arr);
console.log(result1); //[ 2, 3, 1, 4, 5, 7 ]
方式二 先排序后去重
/*
方式二:先排序,然后去重
去重原理是,拿一个数组存储去重后的元素,
拿这个去重数组中最后一个元素和原数组中已经去重的元素的后面一个元素比较,
不相同,则将中的原数组中的元素添加进去重数组。
*/
console.log(arr.sort()); // [1, 2, 2, 2, 3, 3, 4, 5, 7]
function removeRepeat2(arr){
arr.sort((a,b)=>a-b); //从小到大排序
// return arr;
var array = [arr[0]];
for(var i = 1; i<arr.length; i++){
if(arr[i] !== array[array.length -1]){
array.push(arr[i]);
}
}
return array;
}
console.log(removeRepeat2(arr)); //[ 1, 2, 3, 4, 5, 7 ]
方式三 ES6中的Set集合去重
ES6 的Set 集合 去重 (高性能) set可以接受一个数组参数并返回一个不重复的对象
function removeRepeat3(arr){
return Array.from(new Set(arr));
}
console.log(removeRepeat3(arr)); //[ 2, 3, 1, 4, 5, 7 ]
方式四 过滤器fillter()方法
/*
原理:filter() 方法创建一个新的数组,新数组中的元素是通过检查指定数组中符合条件的所有元素。
*/
// function removeRepeat4(arr){
// return arr.filter(function(item,index){
// return arr.indexOf(item) == index;
// }).sort((a,b)=>a-b);
// }
function removeRepeat4(arr){
//返回一个满足条件的数组
return arr.filter((item,index)=>{
return arr.indexOf(item) == index;
//重复元素第一次出现的索引和自身索引相同时才满足条件
}).sort((a,b)=>a-b);
}
console.log(removeRepeat4(arr)); //[ 1, 2, 3, 4, 5, 7 ]