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


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

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

    1. // 1.双层for循环
    2. var arr = [1,1,2,3,5,4,7,7,'hello','hello']
    3. function unique(arr){
    4. // 控制第一个数
    5. for(let i = 0; ilength; i++){
    6. // 控制第二个数
    7. for(let j = i+1; jlength; j++){
    8. // 判断前后是否相等
    9. if(arr[i]===arr[j]){
    10. // 用splice删除一个数,会修改原数组
    11. arr.splice(j,1)
    12. // 修正下标
    13. j--;
    14. }
    15. }
    16. }
    17. return arr
    18. }
    19. console.log(unique(arr));

    方法二:indexOf()

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

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

    方法三:lastindexOf()

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

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

     

    方法四:includes()

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

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

    方法五:forEach()+indexOf()

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

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

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

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

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

     

    方法七:set()

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

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

  • 相关阅读:
    JVM学习之路(七)——JVM配置参数
    音视频从入门到精通——FFmpeg结构体:AVCodecContext分析
    【leetcode】【剑指offer Ⅱ】067. 最大的异或
    小程序的console中出现:。。。不在以下 request 合法域名列表中,请参考文档:。。。的报错解决
    kubernetes(K8S)学习笔记P2:搭建K8s集群2种方式
    uni-app 之 NoticeBar 滚动通知,横向滚动,竖/纵向滚动
    binary tree Leetcode 二叉树算法题
    青少年python系列 44.面向对象-多态
    Spring、MyBatis框架和Redis数据库介绍 第2关:Mybatis框架简介
    基于C#的Windows控制台的吃豆豆小游戏
  • 原文地址:https://blog.csdn.net/qq_48802092/article/details/126611792