下面是数组去重的几种方法:
数组去重方法一:使用Set集合去重
//方法一:
function fun(arr){
let set = new Set(arr);
arr=Array.from(set);
return arr;
}
数组去重方法二:新建一个数组,将没有重复的数组元素添加到新数组并返回新数组
//方式二
function fun(arr) {
let arr1 = [];
for (let i = 0; i < arr.length; i++) {
if (arr1.indexOf(arr[i]) > -1) {
continue;
} else {
arr1.push(arr[i]);
}
}
return arr1;
}
数组去重方法三:遍历数组判断并删掉重复元素
//方式三:
function fun(arr){
for(let i = 0;i<arr.length;i++){
for(let j = i+1;j<arr.length;){
if(arr[i]==arr[j]){
arr.splice(j,1)
}else{
j++
}
}
}
return arr;
}
数组去重方法四:使用数组filter方法过滤出只出现一次的数组元素
//方法四:
function fun(arr){
return arr.filter((item,index)=>arr.indexOf(item)==index);
}
数组去重方法五:通过对比元素第一次出现的下标和最后一次出现的下标,如果下表不相等,说明重复,删掉一个,然后++
// 方法五:
function fun(arr){
for(let i=0;i<arr.length;){
if(arr.indexOf(arr[i])!=arr.lastIndexOf(arr[i])){
arr.splice(i,1)
}else{
i++
}
}
return arr;
}
数组去重方法六:先使用sort()方法将数组排序,然后依次比较相邻元素是否相等,如果相等则删除后面的元素
function fun(arr){
arr.sort();
for(let i = 0; i < arr.length-1; i++) {
if(arr[i] === arr[i+1]) {
arr.splice(i+1, 1);
i--;
}
}
return arr;
}
数组去重方法七:使用reduce()方法遍历数组,并将数组元素存入一个新数组中,如果元素已经存在于新数组中,则不再存入
function fun(arr) {
return arr.reduce((prev, cur) => {
if(!prev.includes(cur)) {
prev.push(cur);
}
return prev;
}, []);
}
扩展数组splice方法 :
扩展数组reduce方法 :
数组的reduce()方法是一个高阶函数,用于对数组中的所有元素进行累加计算。它接收两个参数:一个回调函数和一个初始值。回调函数又包含4个参数:
- accumulator: 累加器,它存储着上一次回调函数执行的结果(即累加值)。
- currentValue:当前元素,即数组中当前被处理的元素。
- currentIndex: 当前元素的索引。
- array:当前数组。
reduce()方法对数组中的每个元素依次调用回调函数,将回调函数的返回值累加到累加器上,并返回最终的结果。
下面是reduce()方法的语法:
array.reduce(callback[, initialValue]);
其中,callback为必需,是回调函数,initialValue为可选,是初始值。
下面是一个例子,计算一个数组的所有元素的和:
let arr = [1, 2, 3, 4, 5];
let sum = arr.reduce((accumulator, currentValue) => accumulator + currentValue, 0);
console.log(sum); // 15
在上面的例子中,初始值为0,回调函数将累加器和当前元素相加,得到的结果再赋值给累加器。因此,最终的结果为15。
需要注意的是,如果数组为空且没有提供初始值,reduce()方法会抛出TypeError异常。如果数组仅有一个元素(无论是否提供初始值),那么该元素就是返回值。如果数组为空但是提供了初始值,那么初始值就是返回值。
以上是个人整理的七种数组去重方式,如果有其他方式,欢迎大家讨论