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]

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

相关推荐
微祎_5 分钟前
Flutter for OpenHarmony:构建一个 Flutter 旋转迷宫游戏,深入解析网格建模、路径连通性检测与交互式解谜设计
javascript·flutter·游戏
红色的小鳄鱼9 分钟前
Vue 教程 自定义指令 + 生命周期全解析
开发语言·前端·javascript·vue.js·前端框架·html
●VON12 分钟前
React Native for OpenHarmony:解构 TouchableOpacity 的触摸反馈与事件流控制
javascript·学习·react native·react.js·性能优化·openharmony
有诺千金15 分钟前
VUE3入门很简单(5)---组件通信(自定义事件)
javascript·vue.js·ecmascript
2501_944448002 小时前
Flutter for OpenHarmony衣橱管家App实战:支持我们功能实现
android·javascript·flutter
会跑的葫芦怪8 小时前
若依Vue 项目多子路径配置
前端·javascript·vue.js
xiaoqi9229 小时前
React Native鸿蒙跨平台如何进行狗狗领养中心,实现基于唯一标识的事件透传方式是移动端列表开发的通用规范
javascript·react native·react.js·ecmascript·harmonyos
jin12332210 小时前
React Native鸿蒙跨平台剧本杀组队消息与快捷入口组件,包含消息列表展示、快捷入口管理、快捷操作触发和消息详情预览四大核心功能
javascript·react native·react.js·ecmascript·harmonyos
烬头882111 小时前
React Native鸿蒙跨平台实现二维码联系人APP(QRCodeContactApp)
javascript·react native·react.js·ecmascript·harmonyos
pas13611 小时前
40-mini-vue 实现三种联合类型
前端·javascript·vue.js