【JS】数组去重

2023-05-16

【JS】数组去重

  • 有一个数组 arr = [‘a’, ‘c’, ‘b’, ‘c’, ‘e’, ‘d’, ‘a’, ‘f’, ‘e’, ‘g’, ‘b’, ‘a’, ‘g’] 要求去除掉数组中重复的元素!

案例分析:

  1. 目标:把旧数组里面不重复的元素选出来放到新数组中,重复的元素只保留一个,放到新数组中去重;
  2. 核心:遍历数组,然后拿着旧数组去查询新数组,如果该元素在新数组中没有出现过,就添加进去,否则不要添加;
  3. 如何知道该元素是否存在?利用新数组.indexOf(数组元素),如果返回 -1 说明新数组中没有该元素;

普通版:

    <!-- 要求去掉数组中重复的元素 -->
    <script>
        var arr = ['a', 'c', 'b', 'c', 'e', 'd', 'a', 'f', 'e', 'g', 'b', 'a', 'g'],
            num = [];
        var max, temp, newArr = [];

        // 去重函数
        for (var i = 0; i < arr.length - 1; i++) {
            // 核心:indexOf()
            if (newArr.indexOf(arr[i]) == -1) {
                newArr[newArr.length] = arr[i];
            } else {
                num[num.length] = i;
            }
        }
        console.log('被去掉数组元素的索引号:');
        console.log(num);
        console.log('去重后的新数组:');
        console.log(newArr);
        // 去重后,进行排序(根据的是ASCII码值)
        for (i = 0; i < newArr.length - 1; i++) {
            for (var j = 0; j < newArr.length - 1; j++) {
                if (newArr[j] > newArr[j + 1]) {
                    temp = newArr[j];
                    newArr[j] = newArr[j + 1];
                    newArr[j + 1] = temp;
                }
            }
        }
        console.log('去重/排序后的数组:');
        console.log(newArr);
    </script>

运行结果:
在这里插入图片描述

升级版:

  <!-- 升级版 -->
  <script>
        var arr1 = ['a', 'c', 'b', 'c', 'e', 'd', 'a', 'f', 'e', 'g', 'b', 'a', 'g'],
            num = [];

        var number = [7, 4, 1, 1, 4, 7, 2, 5, 6, 3, 2, 5, 28, 19, 6, 4, 3],
            obj = {};

        // 封装一个去重函数
        function unique(arr) {
            var newArr = [];
            // 判断传入值是否为数组
            if (checkArray(arr)) {
                // 去重
                for (var i = 0; i < arr.length - 1; i++) {
                    if (newArr.indexOf(arr[i]) === -1) {
                        // newArr.push(arr[i]);也可以push()简单
                        newArr[newArr.length] = arr[i];
                    } else {
                        // 存放重复元素的索引号
                        num[num.length] = i;
                    }
                }
                // 排序
                return newSort(newArr);

            } else {
                return "error:传入的这个参数要求必须是数组形式 [参数1,参数2,···]";
            }

        }

        // 封装一个检测函数:判断传入值是否为数组
        function checkArray(arr) {
            var flag = false;
            if (Array.isArray(arr)) {
                return true;
            }
        }

        // 封装一个排序函数:将去重后的数组按照从小到大排序
        function newSort(arr3) {
            for (var i = 0; i < arr3.length - 1; i++) {
                for (var j = 0; j < arr3.length - 1; j++) {
                    if (arr3[j] > arr3[j + 1]) {
                        var t = arr3[j];
                        arr3[j] = arr3[j + 1];
                        arr3[j + 1] = t;
                    }
                }
            }
            return arr3;
        }

        // 输出已经去重并且排好序的数组
        console.log('去重并且排好序的新数组:');
        console.log(unique(arr1));
        console.log(unique(number));

        console.log('重复的数组元素的索引号:');
        console.log(num);

        console.log('检测不是数组的元素:');
        console.log(unique(obj));
    </script>

运行结果:
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【JS】数组去重 的相关文章

  • 字符串的hash进阶(算法笔记)题目:给出N个只有小写字母的字符串,求其中不同的字符串的个数

    字符串的hash进阶 xff08 算法笔记 xff09 题目 xff1a 给出N个只有小写字母的字符串 xff0c 求其中不同的字符串的个数 set总会自动将重复的数字删去 xff0c 因此选择用set span class token m
  • ROS虚拟机与树莓派通信

    问题 xff1a 能否用手机热点作为虚拟机与树莓派的通信网络 xff1f 答案当然是可以的 区别于路由器 xff0c 在使用手机热点时 xff0c 我发现此时虚拟机端可以发送数据到树莓派端 xff0c 而树莓派端不能将数据传送到虚拟机端 解
  • UI自动化之aircv图像识别中心坐标点击

    接上篇 xff1a UI自动化之driver Tap坐标定位上篇提到driver tap是一种盲点方法 xff0c 那么我们改如何解决 xff0c 这里我用到了aircv图像识别库 xff0c 安装 pip install aircv 思路
  • [详解]ArchLinux安装

    1 无线网络连接 如果你用的是有线网络 xff0c 请直接跳过此章节 iwctl span class token comment 进入iwctl span 进入后 xff1a device list span class token co
  • CSP CCF: 202012-2 期末预测之最佳阈值 (C++)

    目录 题目来源题目描述解题过程完整代码 题目来源 链接 CCF 期末预测之最佳阈值 题目描述 解题过程 题目要求为选取合适的安全指数阈值 Theta xff0c 使得该阈值对这 m 位同学上学期的挂科情况进行预测 xff0c 预测正确的次数
  • C++ 中将 Char 转换成 String

    64 TOC 概览 使用 string string size type count charT ch 构造器使用 push back 使用append 使用 insert 使用string string size type count c
  • CSP CCF: 201809-3 元素选择器 (C++)

    目录 题目来源数据特点知识点30分60分80分代码完整思路100分 题目来源 元素选择器 数据特点 知识点 大小写转换 xff1a tolower 大写转小写 xff08 其他字符不会变 xff09 c 43 43 大小写字符 数字的判断及
  • 51单片机0-99秒表计数器+60秒倒计时(数码管两位数)

    51秒表计数器 43 倒计时 xff08 数码管两位数 xff09 一 xff1a 简介 我们实践的效果是用数码管显示0 99并在按下 转换键 后 xff0c 实现60秒倒计时 xff0c 并用蜂鸣器报警提示 xff0c 兼并计数器和倒计时
  • 系统调用的理解

    文章目录 系统调用什么是系统调用系统调用的分类系统调用与库函数的区别 系统调用 什么是系统调用 什么是系统调用 xff1f 答 操作系统的接口函数是连接应用软件与操作系统的中间桥梁 xff0c 系统调用其实就是操作系统提供给应用程序的接口函
  • AndroidStudio配置过程中遇到的一些问题

    自己在安装并配置Android Studio时遇到的一些坑 xff0c 写出来方便大家解决问题 问题一 xff1a BUILD FAILED in 1s Failed to create parent directory C Program
  • STM32F103C8T6汇编点灯

    最简单的结构 只有一个数据段 只是为了不报错而已 area Reset span class token punctuation span data span class token punctuation span readonly sp
  • vscode c++连接mysql

    因为踩坑太多所以写下该篇博客 首先要下载mysql 这里用的是MySQL8 0 16 记住mysql的安装路径 xff0c 主要是include和lib的路径 参考另外一个博主的文章https blog csdn net mzlogin a
  • python之 下载及安装Anaconda

    Python Python是一种面向对象的解释型计算机程序设计语言 xff0c 其使用 xff0c 具有跨平台的特点 xff0c 可以在Linux macOS以及Windows系统中搭建环境并使用 xff0c 其编写的代码在不同平台上运行时
  • UI自动化之TouchAction(dirver).long_press()长按

    之前篇说过driver tap可以通过duration参数设置实现长按 xff0c 除外TouchAction也可以 xff0c 而且还可以用之实现多个点击的事件集 xff0c 废话不多说直接贴码 xff1a span class toke

随机推荐

  • python之 ffmpeg+opencv绿幕抠图,蒙版绿幕抠图,透明化处理,PIL检测图片是否包含透明通道

    目录 OpenCV Python实现绿幕图像抠图 python利用蒙版批量抠图并实现透明化 jpeg格式图片进行批量背景透明化处理 PIL检测图片是否包含透明通道 OpenCV Python实现绿幕图像抠图 boy png xff1a 最终
  • pandas将千万行数据分块保存为CSV文件,保存为HDF5文件

    从数据库读取数据保存为CSV xff0c 然后转换为HDF5 xff0c 用于后面数据快速处理 span class token keyword from span sqlalchemy span class token keyword i
  • NOIP 2002 普及组第四题 过河卒

    题目描述 棋盘上 A 点有一个过河卒 xff0c 需要走到目标 B 点 卒行走的规则 xff1a 可以向下 或者向右 同时在棋盘上 C 点有一个对方的马 xff0c 该马所在的点和所有跳跃一步可达的点称为对方马的控制点 因此称之为 马拦过河
  • Ubuntu18.04安装

    一 制作系统U盘 1 下载Ubuntu18 04系统镜像文件 进入Ubuntu官网 xff0c 先找到Download xff0c 再找到以前的发行版本 older releases xff1a 选择64位的Desktop image xf
  • maven下手动导入ojdbc6-12.1.0.1-atlassian-hosted.jar

    在终端输入如下命令 xff1a mvn install install file Dfile 61 E ojdbc6 12 1 0 1 atlassian hosted jar DgroupId 61 com oracle Dartifac
  • BIOS 和 UEFI

    BIOS 和 UEFI 是电脑的两种启动模式 xff0c 也就是开机后最先执行的程序 它们都是固件 xff0c 程序已经预先写入到芯片中 BIOS是传统的启动方式 xff0c UEFI是一种新的启动方式 xff0c 现在的出的电脑基本都是用
  • 安装双系统后直接进入Ubuntu没有grub引导项

    解决问题 xff1a 安装win10 43 Ubuntu18 04双系统后 xff0c 开机直接进入Ubuntu没有grub引导项 原因 xff1a 没有为Ubuntu的启动项配置grub 如何配置 xff1f 首先在终端执行如下命令打开g
  • VNC 配置使用

    被控制的计算机系统Ubutnu18 04 xff0c 控制的计算机系统Windows10 1 下载 Download VNC Server VNC Connect 被控制的计算机下载Server版 xff0c 控制的计算机下载Viewer版
  • UTC和GMT的区别

    GMT xff1a Greenwich Mean Time 格林尼治标准时间 是以英国格林尼治天文台观测结果得出的时间 xff0c 这是英国格林尼治的当地时间 xff0c 是世界时间的标准 UT xff1a Universal Time 世
  • 基于MAML的改进方法总结

    元学习是解决小样本学习问题的重要方法之一 xff0c 现已取得较为优异的成绩 元学习方法大体上可以分为基于优化的和基于度量两种 基于度量的方法是非参数方法 xff0c 包括孪生网络 关系网络 匹配网络等 基于优化的方法是参数化方法 xff0
  • list与dict互转

    keys span class token operator 61 span span class token punctuation span span class token string 39 a 39 span span class
  • 进栈出栈操作

    首先简单输入n 代表输入数字的个数 xff0c 然后依次进栈 xff0c 再出栈输出每个数字 xff08 栈是一种先进后出的数据结构 xff09 span class token macro property span class toke
  • 指针笔记

    指针的两种写法注意 xff1a int c 61 1 int p 61 amp c 或 int p p 61 amp c xff1b 这两种写法是相等的 另外注意野指针的概念 xff1a 1 野指针的错误来源就是指针定义了以后没有初始化 x
  • Echarts中国地图根据数据对省份渲染不同的颜色

    在 setOption 里面设置 xff08 setOption官方参数及用法介绍 xff09 title span class token comment 标题设置 span legend span class token comment
  • Ubuntu22.04系统安装+显卡驱动安装

    制作Ubuntu系统启动盘 推荐rurus 选择GPT分区 xff0c UEFI引导 xff08 可以cmd运行msinfo32可以看到 xff09 Ubuntu系统卸载 关于up主里面Ubuntu引导项删除出现问题 xff0c 可以采用下
  • error while loading shared libraries: libssl.so.10: cannot open shared object file: No such file or

    error while loading shared libraries libssl so 10 cannot open shared object file No such file or directory 一 依赖文件下载地址 根据
  • ArchLinux安装(VirtualBox)

    VirtualBox配置 1 启用EFI 2 选择光驱 安装ArchLinux 1 查看是否开启EFI span class token comment ls sys firmware efi efivars span 2 查看是否能上网
  • linux查看端口状态&防火墙开放端口

    1 查看防火墙状态 查看防火墙状态 systemctl status firewalld 开启防火墙 systemctl start firewalld 关闭防火墙 systemctl stop firewalld 开启防火墙 servic
  • 【递归】_求解_斐波拉契数列

    斐波纳契数列 xff08 Fibonacci sequence xff09 是数学界十分著名的数列 有著名的兔子问题 xff0c 斐波那契数列又称 兔子数列 黄金分割数列 这个看上去很简单的数列 xff0c 却总是出现在人们的眼前 蜻蜓翅膀
  • 【JS】数组去重

    JS 数组去重 有一个数组 arr 61 a c b c e d a f e g b a g 要求去除掉数组中重复的元素 xff01 案例分析 xff1a 目标 xff1a 把旧数组里面不重复的元素选出来放到新数组中 xff0c 重复的元素