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]

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

相关推荐
王哲晓1 小时前
第三十章 章节练习商品列表组件封装
前端·javascript·vue.js
理想不理想v1 小时前
‌Vue 3相比Vue 2的主要改进‌?
前端·javascript·vue.js·面试
酷酷的阿云1 小时前
不用ECharts!从0到1徒手撸一个Vue3柱状图
前端·javascript·vue.js
aPurpleBerry2 小时前
JS常用数组方法 reduce filter find forEach
javascript
ZL不懂前端3 小时前
Content Security Policy (CSP)
前端·javascript·面试
乐闻x3 小时前
ESLint 使用教程(一):从零配置 ESLint
javascript·eslint
我血条子呢3 小时前
[Vue]防止路由重复跳转
前端·javascript·vue.js
半开半落3 小时前
nuxt3安装pinia报错500[vite-node] [ERR_LOAD_URL]问题解决
前端·javascript·vue.js·nuxt
理想不理想v4 小时前
vue经典前端面试题
前端·javascript·vue.js