2021-05-14 [汇总]数组去重的几种方法

1.使用ES6的SET方法

因为new Set出来不是一个数组形式,所以还要改成数组形式

写法一
var arr = [1, 3, 5, 7, 2, 5, 2, 5, 7, 3, 5, 6, 3, 5, 2, 4, 5, 2, 4, 5, 2, 3, 4, 5, 2, 6, 1, 7];
var newArr = new Set(arr);
console.log([...newArr]);
写法二
var arr = [1, 3, 5, 7, 2, 5, 2, 5, 7, 3, 5, 6, 3, 5, 2, 4, 5, 2, 4, 5, 2, 3, 4, 5, 2, 6, 1, 7];
var newArr = Array.from(new Set(arr));
console.log(newArr);
2.使用双层for循环

原则是i循环和j循环的次数必须不同

写法一
var arr = [1, 3, 5, 7, 2, 5, 2, 5, 7, 3, 5, 6, 3, 5, 2, 4, 5, 2, 4, 5, 2, 3, 4, 5, 2, 6, 1, 7];
for (var i = 1; i < arr.length; i++) {
    for (var j = 0; j < i; j++) {
        if (arr[i] == arr[j]) {
            arr.splice(j, 1);//在第j个元素开始删除,删除1个元素。
            i--;
        }
    }
}
console.log(arr);
写法二
var arr = [1, 3, 5, 7, 2, 5, 2, 5, 7, 3, 5, 6, 3, 5, 2, 4, 5, 2, 4, 5, 2, 3, 4, 5, 2, 6, 1, 7];
for (var i = 1; i < arr.length; i++) {
    for (var j = i + 1; j < arr.length; j++) {
        if (arr[i] == arr[j]) {
            arr.splice(j, 1);
            i--;
        }
    }
}
console.log(arr);
3.查重,若无重复就push进空数组
写法一:arr[i] == array[j]
var arr = [1, 3, 5, 7, 2, 5, 2, 5, 7, 3, 5, 6, 3, 5, 2, 4, 5, 2, 4, 5, 2, 3, 4, 5, 2, 6, 1, 7];
var array = [];
for (var i in arr) {
    var repeat = false;
    for (var j in array) {
        if (arr[i] == array[j]) {
            repeat = true;
            break;
        }
    }
    if (!repeat) array.push(arr[i]);
}
console.log(array);
写法二:indexOf
var arr = [1, 3, 5, 7, 2, 5, 2, 5, 7, 3, 5, 6, 3, 5, 2, 4, 5, 2, 4, 5, 2, 3, 4, 5, 2, 6, 1, 7];
var array = [];
for (var i in arr) {
    if (array.indexOf(arr[i]) === -1) array.push(arr[i]);
}
console.log(array);
写法三:includes
var arr = [1, 3, 5, 7, 2, 5, 2, 5, 7, 3, 5, 6, 3, 5, 2, 4, 5, 2, 4, 5, 2, 3, 4, 5, 2, 6, 1, 7];
var array = [];
for (var i in arr) {
    if (!array.includes(arr[i])) {
        array.push(arr[i])
    }
}
console.log(array);
4.利用对象的唯一性
var arr = [1, 3, 5, 7, 2, 5, 2, 5, 7, 3, 5, 6, 3, 5, 2, 4, 5, 2, 4, 5, 2, 3, 4, 5, 2, 6, 1, 7];
var array = [];
var obj = {};
for (var i in arr) {
    if (!obj[arr[i]]) {
        array.push(arr[i]);
        obj[arr[i]] = 1;
    }
}
console.log(array);
5.使用map去重
var arr = [1, 3, 5, 7, 2, 5, 2, 5, 7, 3, 5, 6, 3, 5, 2, 4, 5, 2, 4, 5, 2, 3, 4, 5, 2, 6, 1, 7];
var array = [];
let map = new Map();
for (let i = 0; i < arr.length; i++) {
    if (map.has(arr[i])) { // 如果有该key值
        map.set(arr[i], true);
    } else {
        map.set(arr[i], false); // 如果没有该key值
        array.push(arr[i]);
    }
}
console.log(array);
6.知识点
6.1.Map 原生提供三个遍历器:
keys():返回键名的遍历器。
values():返回键值的遍历器。
entries():返回所有成员的遍历器。
6.2.splice的用法
var arr = [1, 3, 5, 4, 5, 2, 6, 1, 7];
var array = [];
// 用法一:两个参数---删除
array = arr.splice(3, 3); //从第四个元素开始,删除往后三个元素
// 用法二:三个以上参数--修改和增加
array = arr.splice(5, 3, "hello", 'world')
console.log(array); //输出选定元素: [2, 6, 1]
console.log(arr); //输出被修改后的数组:1, 3, 5, 4, 5, 'hello', 'world',  7
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

前端OnTheRun

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值