前言
对数组arr = [1,2,3,1,2,4,2,1,3,5,3,6]去重,得到数组arrNew = [1,2,3,4,5,6]
1、双重for循环
创建一个新数组arrNew,将arr中的每一个元素与arrNew中的元素进行比较,如果不相同就用push()方法添加到arrNew,相同则不添加
<script>
var arr=[1,2,3,1,2,4,2,1,3,5,3,6]
function unique(arr){
// 创建一个新的空数组
var arrNew = [];
// 遍历原数组
for(var i = 0; i < arr.length; i ++){
// 设置一个标识变量,默认为true,代表新数组没有与原数组相同的元素
var flag = true;
// 遍历新数组
for(var j = 0; j < arrNew.length; j ++){
// 与原数组比较,如果一致则标识变为false,代表新数组已经包含该元素
arr[i] === arrNew[j] ? flag = false : flag
}
if(flag){
// flag = true,将原数组的元素加进新数组
arrNew.push(arr[i])
}
}
return arrNew;
}
console.log(unique(arr));
</script>
2、利用indexOf()方法
indexOf() 查询索引,从前往后,获取第一个元素的索引, 如果没有该元素则返回-1
<script>
var arr=[1,2,3,1,2,4,2,1,3,5,3,6]
function unique(arr){
// 创建一个新的空数组
var arrNew = [];
// 遍历原数组
for(var i = 0; i < arr.length; i ++){
// 如果新数组没有原数组中的该元素
if(arrNew.indexOf(arr[i]) == -1){
// 添加进新数组
arrNew.push(arr[i])
}
}
return arrNew;
}
console.log(unique(arr));
</script>
3、利用splice()方法
splice(start,length) start是索引,lenght是个数,从start截取lenght个元素,包括start,返回一个新数组,会改变原来数组大小
<script>
var arr=[1,2,3,1,2,4,2,1,3,5,3,6]
function unique(arr){
// 遍历原数组
for(var i = 0; i < arr.length; i ++){
// 每一个元素与后边的元素比较
for(var j = i+1; j < arr.length; j ++){
if(arr[i] === arr[j]){ //第一个元素等于第二个元素
arr.splice(j,1); //删除第二个元素
j --;
}
}
}
return arr;
}
console.log(unique(arr));
</script>
4、利用filter()方法
filter(function(value,index){}) 过滤数组中的元素
<script>
var arr=[1,2,3,1,2,4,2,1,3,5,3,6]
function unique(arr){
// 创建新的空数组
var arrNew = [];
// 过滤原数组中的元素
arr.filter(function(value,index){
if(arrNew.indexOf(value) == -1){
arrNew.push(value);
}
})
return arrNew;
}
console.log(unique(arr));
</script>
5、利用对象的特点
利用对象属性不能重复的特性给数组去重,将数组中的元素当做对象的属性名(属性名不会重复),再将新对象中的属性当做新数组的元素
<script>
var arr = [1, 2, 3, 1, 2, 4, 2, 1, 3, 5, 3, 6];
function unique(arr) {
// 创建新的空数组
var arrNew = [];
// 创建一个新对象
var obj = {};
// 遍历原数组
for (var i = 0; i < arr.length; i++) {
obj[arr[i]] = arr[i]; //将元素当做对象的属性名,属性值也是元素
}
// 遍历对象
for (x in obj) {
arrNew.push(Number(x)); //将对象的属性名添加到新数组
}
return arrNew;
}
console.log(unique(arr));
</script>
6、利用Set
Set结构的成员不能重复
<script>
var arr = [1, 2, 3, 1, 2, 4, 2, 1, 3, 5, 3, 6];
// 将数组作为参数,set结构中数据不可以重复,得到的set内没有重复数据
var set = new Set(arr);
//将set转为数组
var arrNew = Array.from(set);
console.log(arrNew);
</script>
7、利用Map
has(key) 判断Map实例内是否含有指定的键值对
<script>
var arr = [1, 2, 3, 1, 2, 4, 2, 1, 3, 5, 3, 6];
function unique(arr){
// 创建一个新的空数组
var arrNew = [];
// 创建一个map
var map = new Map();
// 遍历原数组
for(var i = 0; i < arr.length; i ++){
// 判断map中是否含有指定的键值对,原数组元素为键
if(!map.has(arr[i])){ //没有
map.set(arr[i],1); //添加到map中
arrNew.push(arr[i]) //添加到新数组红
}
}
return arrNew;
}
console.log(unique(arr));
</script>