JavaScript 数组去重的方法
- 方法一: 两层for语句遍历判断
- 方法二: 通过数组API indexOf()进行筛选
- 方法三: 通过数组API includes()进行筛选
- 方法四: 通过Set对象进行过滤
- 总结
有时候我们需要获取一个数组中不重复的元素来完成一些操作。下面,我来介绍几种个人认为比较简单的方法
方法一: 两层for语句遍历判断
简单思路: 从数组第一个元素开始,每一次循环拿数组的下一个元素与其之后的每个元素都进行遍历比较,如果存在相同的元素,则通过splice()将其删除并从删除的索引位置开始继续比较(因为splice()删除后,后面元素往前移)。
代码如下:
//定义一个有重复数据的数组
let arr = [1,2,1,'j',5,'1',true,2,5,'h',true];
//去重方法
function duplicateRemoval(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);
//因为当前索引值的元素被删除,且后面元素往前移 我们需要将下一次遍历索引从但当前索引开始,即j--
j--;
}
}
}
}
//方法调用
duplicateRemoval(arr);
//结果验证
console.log(arr);
方法二: 通过数组API indexOf()进行筛选
indexOf()方法 返回数组中值为其参数的数组索引,不存在则返回-1。
简单思路: 首先,定义一个新数组用于接收去重后的原数组元素。 然后,遍历判断新数组中是否存在当前原数组元素,若不存在(即indexOf()返回-1)则通过push()方法将该元素存到新数组的最后位置。
代码如下:
//定义一个有重复数据的数组
let arr = [1,2,1,'j',5,'1',true,2,5,'h',true];
//去重方法
function duplicateRemoval(arr) {
//定义接收去重后结果的新数组
let newArr = [];
for(let i = 0;i<arr.length;i++){
//判断新数组中是否存在当前索引为i的原数组元素
if (newArr.indexOf(arr[i])===-1) {
//如果不存在,则将其放到新数组的最后位置
newArr.push(arr[i]);
}
}
//返回去重后的新数组
return newArr;
}
//打印方法执行返回结果
console.log(duplicateRemoval(arr));
方法三: 通过数组API includes()进行筛选
includes()方法 判断数组中是否存在值为其参数的元素,若存在则返回true,不存在则返回false。
简单思路: 与方法二类似,当新数组中不存在当前遍历的原数组元素时,将其插入到新数组中。
代码如下:
//定义一个有重复数据的数组
let arr = [1,2,1,'j',5,'1',true,2,5,'h',true];
//去重方法
function duplicateRemoval(arr) {
//定义接收去重后结果的新数组
let newArr = [];
for(let i = 0;i<arr.length;i++){
//判断新数组中是否存在当前索引为i的原数组元素
if (!newArr.includes(arr[i])) {
//如果不存在,则将其放到新数组的最后位置
newArr.push(arr[i]);
}
}
//返回去重后的新数组
return newArr;
}
//打印方法执行返回结果
console.log(duplicateRemoval(arr));
方法四: 通过Set对象进行过滤
Set类似于数组,但是成员的值都是唯一的,没有重复的值。
简单思路:用数组初始化一个Set对象set,然后再将其转化为数组即可去除数组中重复的元素。
代码如下:
//定义一个有重复数据的数组
let arr = [1,2,1,'j',5,'1',true,2,5,'h',true];
//定义set对象,并用数组arr对其进行初始化
let set = new Set(arr);
//通过Array.from()方法将 set 转化为数组 并赋给新数组
let newArr = Array.from(set);
//打印结果
console.log(newArr);
总结
个人认为,这四种方法较易于理解与使用。