对于 JS 中数组去重方法的一个总结 :

这篇文章是对于在 JS 中 数组去重 方法的一个总结 :


  • 方法一 :通过数组的双重 for 循环实现

实现思路:双层循环 for 循环实现,外层循环遍历原数组中每一个元素,内层循环遍历新生成的数组中每个元素,设置一个标记位判断原数组中元素是否在新数组中存在,存在就 return / break 不存在则添加到新的数组中。

function uniqueArray(arr){
    //存放不重复的数值
    const newArr = [];
    //做是否重复的标记
    let isRepeat;
    //外层循环数组 arr,每个数值在判断 
    for(let i=0; i<arr.length; i++){
        //刚开始标志位为 false
        isRepeat = false;
        //内层循环新生成的数组 newArr,判断 arr 中项是否在 newArr中存在 
        for(let j=0; j<newArr.length; j++){
            //arr 中项在 newArr中存在 
            if(newArr[j] === arr[i]){
                isRepeat = true;
                break;
            }
        }
        //arr 中项在 newArr中不存在 
        if(!isRepeat){
            newArr.push(arr[i);
        }
    }
    return newArr;
}
  • 方法二 : 通过数组的 filter() 和 indexOf() 方法实现

实现思路:循环过滤数组中每一个元素,如果一个元素在数组中唯一,那么它的第一次出现的索引等于它的下标;filter()方法的过滤功能,indexOf() 方法只返回第一次出现的索引。

function uniqueArray(arr){
    return arr.filter((item,index) => {
        return arr.indexOf(item) === index;
    })
}
  • 方法三 :通过数组方法forEach() + indexOf() 实现

实现思路 : 利用 forEach 方法,循环操作数组,新建数组 newArr ,使用 indexOf 方法判断当前循环的元素是否在 newArr数组中,不存在添加到 newArr 中,最终返回 newArr。 

function uniqueArr(arr){
    //新建数组,用来存放不重复的数值
    const newArr = [];
    //循环操作数组中每一项
    arr.forEach(item => {
        //判断原数组 arr 中每一个数值是否存在于数组 newArr 中
        //不存在,添加在 newArr 中
        if(newArr.indexOf(item) === -1){
            newArr.push(item);
        }
    })
    return newArr;
}
  • 方法四 :通过数组 sort() 方法实现

实现思路 :先对数组进行 sort 排序;之后 for 循环数组中每一个元素,判断它是否和它下一个元素相等;不相等则加入 newArr 中,最后返回 newArr 即可。

function uniqueArray(arr){
    const newArr = [];
    arr.sort();
    for(let i=0; i<arr.length; i++){
        if(arr[i] !== arr[i+1]){
            newArr.push(arr[i]);
        }
    }
    return newArr;
}
  • 方法五 :通过数组的 includes() 方法是实现

实现思路 :forEach 遍历原数组 arr ,利用 includes() 方法判断当前元素是否存在于 newArr 中,不存在则添加到 newArr 中,最后返回 newArr 即可。

function uniqueArray(arr){
    const newArr = [];
    arr.forEach(item => {
        if(!newArr.includes(item)){
            newArr.push(item);
        }
    })
    return newArr;
}
  • 方法六 : 通过数组的 reduce() 方法实现
function uniqueArray(arr) {
  return arr.sort().reduce((prev, cur) => {
    if (prev.length === 0 || prev[prev.length - 1] !== prev) {
      prev.push(cur)
    }
    return prev
  }, [])
}
  • 方法七 :使用 ES6 的 Set 实现

实现思路 :Set 对象里的值不允许重复,会自动去掉重复值,在使用 Array.from() 方法,将 Set 对象转换成数组。

function uniqueArray(arr){
    return Array.from(new Set(arr));
}
  • 方法八 : 使用 ES6 的 Map 实现
function uniqueArray(arr) {
  const newArr = [];
  const tmp = new Map();
  for (let i = 0; i < arr.length; i++) {
    if (!tmp.get(arr[i])) {
      tmp.set(arr[i], 1);
      newArr.push(arr[i])
    }
  }
  return newArr;
}
  • 方法九 :使用对象实现

实现思路 :利用对象属性存在的特性,如果没有该属性则存入新数组。

function uniqueArray(arr){
   var obj={}
   var newArr=[]
   for (let i = 0; i < arr.length; i++) {
        if (!obj[arr[i]]) {
             obj[arr[i]] = 1
             newArr.push(arr[i])
            }   
    }
    return newArr
}

方法有很多,此处不在一一列举,知道以上的方法,完全够用日常开发中需求。在这里推荐使用 ES6 的 Set 和 Map 方法,能提高性能。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值