js篇-数组去重

数组去重

哈喽呀~ 小伙们呀,今天的知识又来啦。今天作者要讲的内容是数组去重

数组:一组按顺序排列的数据的集合,数组中的每个成员被称为元素,每个元素在数组中都有编号,也就是我们所说的索引。

数组去重:顾名思义,数组去重,就是将一个数组中重复的数字去除,使得数组中每个元素只保留一次,不重复出现。

数组去重在工作中也是很常见的,接下来,我们就秉持着"实现功能不是目的,目的是实现功能的过程"的态度一起来看看有哪些实现方法吧。实现方法有很多,作者在这里就列出几种,有别的方法小伙伴们也可以留言评论,我们一起学习~

在实现功能之前,作者还是照常会带大家简单回顾一下用到的知识点~

1. 使用Set()

1. Set()

Set构造函数是用于创建一个Set对象,它可以存储任意类型的唯一值。

注释:Set()只能用new创建。如果在没有new的情况下调用它,就会抛出TypeError(因为Set是一个构造函数)。

小举一个例子

js 复制代码
const needSet = new Set();
needSet.add(1); //[1]
needSet.add(2); //[1,2]
needSet.add(2); //[1,2]
needSet.add("zifuchuan"); //[1,2,'zifuchuan']
const obj = {a:1,b:2};
needSet.add(obj);//[1,2,'zifuchuan',{{a:1,b:2}}]

实现功能

js 复制代码
const arr = [1,3,5,5,6];
let arr1 = new Set(arr); //此时是一个Set对象
arr1 = [...arr1]; //使用展开运算符,将其变成一个数组
console.log(arr1); //[1,3,5,6]

2. 循环遍历并且配合indexOf()或者includes()

1. 循环遍历

循环遍历的方式有很多,这里就不展开说说了,相信小伙们对循环遍历的操作也很熟悉了。想要了解更多,可以看作者的下一篇文章~

  1. for循环
  2. forEach()
  3. for...in...
  4. for...of...
  5. map()
  6. some()
  7. every()
  8. filter()

2. indexOf

indexOf():该方法返回数组中第一次出现给定元素的下标,如果不存在则返回-1。

小举一个例子

js 复制代码
const arr = [1,2,3,5,1];
arr.indexOf(1); //0
arr.indexOf(2);//1
arr.indexOf(5); //3
arr.indecOf(10); //-1

注释:你没法使用 indexOf() 来搜索 NaN

js 复制代码
const array = [NaN];
array.indexOf(NaN); // -1

3. includes

判断数组是否包含某一个指定的值,如果包含则返回true,否则返回false

js 复制代码
[1, 2, 3].includes(2); // true
[1, 2, 3].includes(4); // false
[1, 2, 3].includes(3, 3); // false
[1, 2, NaN].includes(NaN); // true
["1", "2", "3"].includes(3); // false

实现功能

js 复制代码
const arr = [1,3,5,5,6];
let arr2 = [];
arr.forEach((items,i)=>{
    if (arr2.indexOf(items) === -1){
    // 如果新数组arr2里面没有找到arr的元素就往arr2里面添加这个arr的元素
        arr2.push(arr[i]);
    }
})
console.log(arr2); //[1,3,5,6]

实现功能

js 复制代码
const arr = [1,3,5,5,6];
let arr3 = [];
for (let i = 0; i < arr.length; i++) {
    if(arr3.includes(arr[i]) === false){
    // 如果新数组arr3里面没有找到arr的元素就往arr3里面添加这个arr的元素
        arr3.push(arr[i]);
    }
}
console.log(arr3; //[1,3,5,6]

3. filter+indexOf

1. filter()

filter():把数组的某些元素过滤掉,然后返回剩下的元素。

注释:filter() 不会对空数组进⾏检测;不会改变原始数组。

举个小例子

js 复制代码
function isBigEnough(value) {
  return value >= 10;
}
const filtered = [12, 5, 8, 130, 44].filter(isBigEnough);
console.log(filtered);// [12, 130, 44]

实现功能

js 复制代码
const arr = [1,3,5,5,6];
let arr3 = arr.filter((items,i)=>{
    return arr.indexOf(items) === i;
})
console.log(arr3); //[1,3,5,6]

4. 双重循环配合splice()

这里所提到的splice(),可以看作者发表过的文章:将手机号的中间几位数改成*

js 复制代码
const arr = [1,3,5,5,6];
for (let i = 0; i < arr.length; i++){
    for (let j = i + 1; j < arr.length; j++){
        if (arr[i] === arr[j]){
            arr.splice(j,1); //从第j项开始切割,切割一位
            j--;
        }
    }
}
console.log(arr);//[1,3,5,6]

小伙伴,今天的分享到此结束啦~ 还是那句话,有什么别的方法可以留言评论噢~ 请多多指教

相关推荐
Mintopia6 分钟前
Three.js 深度冲突:当像素在 Z 轴上玩起 "挤地铁" 游戏
前端·javascript·three.js
MrSkye13 分钟前
🔥JavaScript 入门必知:代码如何运行、变量提升与 let/const🔥
前端·javascript·面试
爱学习的茄子22 分钟前
深入理解JavaScript闭包:从入门到精通的实战指南
前端·javascript·面试
zhanshuo1 小时前
不依赖框架,如何用 JS 实现一个完整的前端路由系统
前端·javascript·html
讨厌吃蛋黄酥1 小时前
智能前端新纪元:语音交互技术与安全实践全解析
javascript
1234Wu1 小时前
React Native 接入 eCharts
javascript·react native·react.js
脑袋大大的9 小时前
JavaScript 性能优化实战:减少 DOM 操作引发的重排与重绘
开发语言·javascript·性能优化
速易达网络10 小时前
RuoYi、Vue CLI 和 uni-app 结合构建跨端全家桶方案
javascript·vue.js·低代码
耶啵奶膘10 小时前
uniapp+firstUI——上传视频组件fui-upload-video
前端·javascript·uni-app
JoJo_Way10 小时前
LeetCode三数之和-js题解
javascript·算法·leetcode