JavaScript去重的两种方法
方法一:利用内置数组对象的splice()方法
思路:
splice()方法可以增删数组内的元素
splice()方法解析:
slice(参数一,参数二,参数三.....)
参数一:数组开始操作的索引(包括该索引的元素本身)
参数二:删除数组元素的个数(数量可以是0,即等于不删除)
参数三:在进行参数一和参数二的删除操作之后,在参数一的位置添加元素
注意1:参数一必加,参数二和三属于可加可不加
注意2:一个参数等于,该索引位置后面的数组元素全删除
注意3:两个参数等于,该参数一索引位置后面的数组元素删除参数二的数量
例如:arr.splice(0,2) //删除arr[0] arr[1] 两个元素
注意4:三个参数可以实现只增加数组元素功能
例如:arr.splice(0,0,22) //在数组索引0的位置删除0个元素,创建了arr[0]=22这个元素
实现原理:
用for语句遍历arr这个数组,第一层for语句遍历
第二层for语句遍历该元素后面的数组元素arr[i]
第二层for语句的if语句判断元素是否相同, 一旦相同就把后面的元素a[j]通过splice(j,1)方法去掉
实现代码如下:用arr数组当函数实参传入fn函数中,return返回去重后的arr数组
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<script>
function fn(arr) {
for (let i = 0; i < arr.length; i++) { //遍历arr数组
for (let j = i + 1; j < arr.length; j++) { //遍历arr[i]项后面的数组元素a[j]
if (arr[i] === arr[j]) { //判断是否有重复值
arr.splice(j, 1); //去重splice方法操作
}
}
}
return arr; //返回去重后的数组
}
let arr = [48, 98, 48, 56, 123, 9, 53]; //需要去重的数组
console.log(fn(arr));
</script>
</body>
</html>
方法二:利用内置数组对象的indexOf()方法和push()方法配合空数组实现
思路:
一.利用空数组存放去重后的新数组
二.用indexOf方法判断新数组是否有改项,如果没有indexOf返回-1,则用push网新数组里面添加这个元素
注意1:push(参数)方法是往数组最后面添加元素,参数是添加元素的内容
注意2:indexOf(参数) 如果数组存在参数这个元素,则返回第一个该参数内容位置的索引值,假如不存在则返回-1
实现代码:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<script>
let arr=[48,45,68,45,12,45,65,132]; //需要去重的就数组
let newArr=[]; //新数组,用来存放旧数组去重后的结果
for(let i=0;i<arr.length;i++){ //遍历旧数组
if(newArr.indexOf(arr[i])===-1){ //判断新数组是否存在相同元素
newArr.push(arr[i]);
}
}
console.log(newArr); //打印显示去重后的新数组
</script>
</body>
</html>