js数组去重方法 总结

技术博客 (759) 2024-01-08 09:01:01

使用indexOf()方法去除重复的元素

indexOf方法返回给定元素在数组中第一次出现的位置,返回结果是匹配开始的位置。如果没有出现则返回-1

var arr = [1,1,2,2,3,3,4,4];
var newArr = [];
for(var i=0,len=arr.length;i<len;i++){
if(newArr.indexOf(arr[i]) == -1){
newArr.push(arr[i]);
}
}
console.log(newArr);
使用lastIndexOf()方法去除重复的元素
  • lastIndexOf方法返回给定元素在数组中最后一次出现的位置,如果没有出现则返回-1
  • lastIndexOf方法的用法跟indexOf方法一致,主要的区别lastIndexOf从尾部开始匹配,indexOf则是从头部开始匹配
  • 另外,lastIndexOf的第二个参数表示从该位置起向前匹配
function noRepeat(arr) {
var res = [];
for (var i = 0; i < arr.length; i++) {
    res.lastIndexOf(arr[i]) !== -1 ? '' : res.push(arr[i]);
}
return res;
}
console.log(noRepeat([1, 1, 2, 2, 3, 3, 4, 4]));
使用filter()与indexOf()方法去除重复的元素
  • filter方法用于过滤数组成员,满足条件的成员组成一个新数组返回
  • 它的参数是一个函数,所有数组成员依次执行该函数,返回结果为true的成员组成一个新数组返回
  • 该方法不会改变原数组
  • filter方法的参数函数可以接受三个参数:当前成员,当前位置和整个数组
  • filter()去除重复元素依靠的是indexOf的属性,即总是返回第一个元素的位置,后面的重复元素位置与indexOf返回的位置不相等,所以filter()可以过滤掉它们
var arr = [1,1,2,2,3,3,4,4];
    var newArr = arr.filter(function(value,index,self){
    return self.indexOf(value) === index;
});
console.log(newArr)
使用ES6提供的Set结构去除重复的元素
  • 主要利用Set结构不能接收重复数据的特点
var arr = [1,1,2,2,3,3,4,4];
    function noRepeat(arr){
        var newArr = [];
        var myset = new Set(arr);
        for(var val of myset){
        newArr.push(val);
}
    return newArr;
}
var arr2 = noRepeat(arr);
console.log(arr2)
使用ES6提供的Set与扩展运算符去除重复的元素
var arr = [1,1,2,2,3,3,4,4];
function norepeat(arr) {
    let set = new Set(arr);
    arr = [...set];
    return arr;
}
console.log(norepeat(arr))
使用set与Array.from()方法去除重复的元素
  • Array.from方法可以将 Set 结构转为数组
var arr = [1,2,2,2,3,3,4,4];
var newArr = Array.from(new Set(arr));
console.log(newArr);
使用splice()方法与双层循环去除重复的元素
  1. splice()方法用于删除原数组的一部分成员,并可以在删除的位置添加新的数组成员,返回值是被删除的元素
var arr = [1,1,2,2,3,3,4,4];
function noRepeat(arr){
    for (var i = 0; i < arr.length; i++) {
        for (var j = 0; j < arr.length; j++) {
            if (arr[i] == arr[j] && i != j) {
                arr.splice(j, 1);
            }
        }
    }
    return arr;
}
var arr2  = noRepeat(arr);
console.log(arr2)
使用includes()方法去除重复的元素
  • includes()方法用于判断字符串是否包含指定的子字符串,如果找到匹配的字符则返回true,否则返回false。
function noRepeat(arr) {
    var newArr = [];
    for (var i = 0; i < arr.length; i++) {
        if (!newArr.includes(arr[i])) {
            newArr.push(arr[i]);
        }
    }
    return newArr;
}
console.log(noRepeat([1,1,2,2,3,3,4,4]))
使用forEach()和includes()方法去除重复的元素
  • forEach方法是对数组的所有成员依次执行参数函数。但是,forEach方法不返回值,只用来操作数据
  • forEach的参数是一个函数,该函数同样接受三个参数:当前值、当前位置、整个数组
function noRepeat(arr) {
    var newArr = [];
    arr.forEach(item => {
        return newArr.includes(item) ? '' : newArr.push(item)
    });
    return newArr;
}
console.log(noRepeat([1,1,2,2,3,3,4,4]));
利用空对象来记录新数组中已经存储过的元素
var arr = [1,1,2,2,3,3,4,4];
var obj={};
var newArr=[];
for(var i=0;i<arr.length;i++){
    if(!obj[arr[i]]){
        obj[arr[i]]=true;
        newArr.push(arr[i]);
    }
}
console.log(newArr);
使用sort()方法去除重复的元素
  1. 使用sort()方法先将原数组排序,然后与相邻的进行比较,如果不同则存入新数组。(原数组长度不变,但要注意:sort方法不是按照大小排序,而是按照字典顺序)
var arr = [1,1,2,2,3,3,4,4];
function noRepeat(arr) {
    var ret = [];
    arr.sort();  
    var res = arr[0];
    ret.push(arr[0]);
    for (var i = 1; i < arr.length; i++) {
        if (arr[i] != res) { 
            ret.push(arr[i]);
            res = arr[i];
        }
    }
    return ret;
}
var arr2 = noRepeat(arr);
console.log(arr2);
来了就点个赞再走把 (*  ̄3)(ε ̄ *)d
THE END

发表回复