【JavaScript】-- 数组去重的方法

方法一:双重for循环 + splice()

思路:分别用第一层与第二层for循环控制前一个数与后一个数,判断前后是否相等,若结果为true,则用数组方法splice删除一个数,并修正数组下标。

// 1.双层for循环
var arr = [1,1,2,3,5,4,7,7,'hello','hello']
function unique(arr){
    // 控制第一个数
    for(let i = 0; i<arr.length; i++){
        // 控制第二个数
        for(let j = i+1; j<arr.length; j++){
            // 判断前后是否相等
            if(arr[i]===arr[j]){
                // 用splice删除一个数,会修改原数组
                arr.splice(j,1)
                // 修正下标
                j--;
            }
        }
    }
    return arr
}
console.log(unique(arr));

方法二:indexOf()

思路:先定义一个新数组来接收去重后的新数组,遍历原数组,若该元素在新数组中不存在,即indexOf 等于-1时,使用push方法将其添加入新数组中,最后返回这个新数组。

// 数组去重(indexOf)
var arr = [1,1,2,3,5,4,7,7,'hello','hello']
function unique(arr) {
    var res = []
    for (var i = 0; i < arr.length; i++) {
        if (res.indexOf(arr[i]) == -1) {
            res.push(arr[i])
        }
    }
    return res
}
console.log(unique(arr));

方法三:lastindexOf()

思路:与indexOf方法一样,只是将indexOf改为lastindexOf。

var arr = [1,1,2,3,5,4,7,7,'hello','hello']
lastIndexOf()
function unique(arr){
    let newarr = []
// lastIndexOf(要寻找的参数,要开始寻找的索引)
    for(let i = 0; i<arr.length; i++){
        if(newarr.lastIndexOf(arr[i])===-1){
            newarr.push(arr[i])
        }
    }
    return newarr;
}
console.log(unique(arr));

 

方法四:includes()

思路:先定义一个新数组来接收去重后的新数组,遍历原数组,判断原数组的元素在新数组中是否存在,若为false,则将其使用push方法添加进新数组,并返回新数组。

 var arr = [1,1,2,3,5,4,7,7,'hello','hello']
// includes(元素值) 方法用来判断一个数组是否包含一个指定的值,如果是返回 true,否则false。
function unique(arr){
    newarr = [];
    for(let i = 0; i<arr.length; i++){
        if(!newarr.includes(arr[i])){
            newarr.push(arr[i]);
        }
    }
    return newarr;
}
console.log(unique(arr));

方法五:forEach()+indexOf()

思路:先定义一个新数组来接收去重后的新数组,使用forEach方法遍历原数组,若该元素在新数组中不存在,即indexOf 等于-1时,使用push方法将其添加入新数组中,最后返回这个新数组。

var arr = [1,1,2,3,5,4,7,7,'hello','hello']
// forEach(遍历)+indexOf
function unique(arr){
    let newArr = [];
    arr.forEach(function(item){
        if(newArr.indexOf(item) === -1){
            newArr.push(item);
        }
    })
    return newArr;
}
console.log(unique(arr));

方法六:filter()+indexOf()/includes()

思路:先定义一个新数组来接收去重后的新数组,利用 filter 过滤并配合 indexOf 查找元素最后返回这个新数组。

var arr = [1,1,2,3,5,4,7,7,'hello','hello']
// 用filter+indexOf/includes
function unique(arr){
    let newArr = [];
    return arr.filter(function(item){
        return newArr.includes(item)?"":newArr.push(item)
    })
    return newArr;
}
console.log(unique(arr));

 

方法七:set()

思路:set是Es6提供的一种新的数据结构,类似于数组,但set里面的值不重复,也就是说值唯一,因此可以直接用来数组去重。

var arr = [1,1,2,3,5,4,7,7,'hello','hello']
// set去重  成员是唯一的
let set=new Set(arr);
console.log(set);

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值