Javascript中数组去重的六种方法

数组去重

  • 第一种方法:
  • 先对数组进行排序sort(),排好序,然后把数组的当前项和后一项进行比较,相同则使用数组的splice(相同的位置,1),但是为了防止数组塌陷,每次删除数组元素的时候要把i的值减一。
        var ary=[1,23,4,2,33,1,2,44,3,2,3]ary.sort(function(a,b){return a-b;});//返回的是排好序的数组for(var i=0;i<ary.length;i++){if(ary[i]===ary[i+1]){ary.splice(i,1);i--;//为了防止数组塌陷}}
  • 第二种方法是:建立一个新数组,要是原数组里面的数是头一次出现(使用数组的indexOf()),那么就把这个数放到新数组里面,否者就抛弃这个数,类似于前面说的随机验证码
var ary=[1,23,4,2,33,1,2,44,3,2,3]var arr2=[];
for(var i=0;i<ary.length;i++){
if(arr2.indexOf(art[i])==-1){
arr2.push(ary[i]);
}
}
  • 第三种方法:直接拿当前项与后一项进行比较,相同的要删除,使用数组splice()进行删除,这里也要防止数组塌陷;
var ary=[1,23,4,2,33,1,2,44,3,2,3]
for(var i=0;i<ary.length;i++){
for(var j=i+1;j<ary.length;j++){if(ary[i]===ary[j]){
ary.splice(j,1);
j--;
}
}
}
  • 第四种方法:利用对象不重名的特性,对象的存储是键值对方式,要获取属性值,要通过对象./[]属性来获取;相同则删除,也要防止数组塌陷
var ary=[1,23,4,2,33,1,2,44,3,2,3]
//新建一个对象
var obj={};
for(var i=0;i<ary.length;i++){
var cur=ary[i];
//如果obj【cur】为真,那就说明对象里面找到了这个数,重复了
if(obj[cur]){
ary.splice(i,1);
i--;
}else{
//给对象赋值  说明obj.xxx=undefined  不存在为假
obj[cur]=cur;//obj【1】=1;
}
}
  • 第五种方法:也是利用对象不重名的方法,但是这次是直接计算其数组各个数的重复次数,
var ary=[1,23,4,2,33,1,2,44,3,2,3]
var obj={};
for(var i=0;i<ary.length;i++){var cur=ary[i];if(obj[cur]){//每次重复一次,其对应的值加一obj[cur]++;
}else{
//说明没有重复,个数只有一个
obj[cur]=1;
}
}
var ary2=[];
//对于对象使用in 方法进行遍历,遍历获取的是属性值
for(var attr in obj){ary2.push(Number(attr));
}
  • 第六种方法:使用ES6中的Set数据结构中重复项不生效的特性
let arr = [1,2,3,3,2,4,5];let list = new Set(arr);console.log("list",list);  // 1,2,3,4,5

但是对于数据的数据类型是不会进行转换的,所以一定要注意元素的数据类型是否是一致

数组去重的面试题:

找出这次考试中,最高分,及最高分出现的次数

//思路:全部人的成绩是一个数组,这就相当于使用数组去重的方法,找到最高的分数,和其次数,首先找到了去重的数组进行从小到大的排序,得到次数,然后通过最高分所对应的索引值得到出现的最高分var ary = [1, 23, 4, 2, 33, 1, 2, 44, 3, 2, 3];var obj = {};for(var i = 0; i < ary.length; i++) {//把数组的值,当作对象的索引赋值给对象,所以通过对象索引获取的是数组出现的次数var cur = ary[i];if(obj[cur]) {//每次重复一次,其对应的值加一obj[cur]++;} else {//说明没有重复,个数只有一个obj[cur] = 1;}}//分数从低到高出现的次数console.log(obj);var ary2 = [];//对于对象使用in 方法进行遍历,遍历获取的是属性值for(var attr in obj) {ary2.push(Number(attr));}console.log(ary2);//最高分console.log(ary2[ary2.length-1]);var count=ary2[ary2.length-1];//最高分出现的次数console.log(obj[count]);

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/286973.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

1小时学会不打代码制作一个网页精美简历(1)

作者简介 作者名&#xff1a;1_bit 简介&#xff1a;CSDN博客专家&#xff0c;2020年博客之星TOP5&#xff0c;蓝桥签约作者。15-16年曾在网上直播&#xff0c;带领一批程序小白走上程序员之路。欢迎各位小白加我咨询我相关信息&#xff0c;迷茫的你会找到答案。系列教程将会在…

分部方法 partial

当有如下这样类似的情况出现的时候&#xff0c;可以有更好的优化方式来处理&#xff0c;那就是分部方法 1 class PartOld2 {3 string name;4 5 public virtual void OnChangeName(string str)6 {7 }8 9 public string Name 10…

一文讲透为Power Automate for Desktop (PAD) 实现自定义模块

今天写了一篇长文&#xff0c;《一文讲透为Power Automate for Desktop (PAD) 实现自定义模块 - 附完整代码》&#xff0c;有兴趣的同学点击 “阅读原文” 参考 &#xff0c;文章地址是 https://www.cnblogs.com/chenxizhang/p/16287195.html 微软的PAD是RPA的一种&#xff0…

软件自动化测试的主要目的,功能测试的目的是什么

从功能测试到自动化测试&#xff1f;从常见的自动化测试过程开始&#xff01;在项目的启动阶段功能测试 目的&#xff0c;我们必须阐明为什么要进行自动化&#xff0c;并选择合适的项目进行自动化测试. 1.为什么要进行自动化&#xff1f;在开始自动化测试之前&#xff0c;我们需…

基于Google Earth Pro做数字化,并在ArcGIS中转为Shapefile图层

在精度满足要求的前提下,可以基于Google Earth Pro做数字化,并在ArcGIS中转为Shapefile图层,然后经行投影转换,得到最终的shp数据。主要步骤包括:新建多边形、导出多边形、格式转换,投影转换等。 一. 新建多边形 命名为皇城水库范围,设置线条和面的样式/颜色,并在影像上…

1小时,不会代码的我如何完成 网易云音乐 大作业网页制作?(IVX 第2篇)

作者简介 作者名&#xff1a;1_bit 简介&#xff1a;CSDN博客专家&#xff0c;2020年博客之星TOP5&#xff0c;蓝桥签约作者。15-16年曾在网上直播&#xff0c;带领一批程序小白走上程序员之路。欢迎各位小白加我咨询我相关信息&#xff0c;迷茫的你会找到答案。系列教程将会在…

C# 第一个LINQ 查询

我们将先介绍一个示例&#xff0c;这个示例使用 LINQ 创建了一个查询&#xff0c;以便在一个简单的内存对象数组中查找一些数据&#xff0c;并输出到控制台上。试一试&#xff1a;第一个 LINQ 程序&#xff1a;按照下面的步骤在 Visual Studio 中创建示例&#xff1a; using Sy…

1小时赚300块,不打代码帮人做个吃鸡网页 [IVX实战第3篇]

作者简介 作者名&#xff1a;1_bit 简介&#xff1a;CSDN博客专家&#xff0c;2020年博客之星TOP5&#xff0c;蓝桥签约作者。15-16年曾在网上直播&#xff0c;带领一批程序小白走上程序员之路。欢迎各位小白加我咨询我相关信息&#xff0c;迷茫的你会找到答案。 实战目录 1…

ArcGIS10.6中,在3D分析工具中创建视线之后,怎么将其删除?

如下图所示&#xff0c; 为3D分析工具条&#xff1a; 在3D分析中创建的线&#xff0c;例如做剖面图是插入的线&#xff0c;该怎样删除呢&#xff1f; 如下图所示。 删除方法是&#xff0c;先使用如下选择工具&#xff0c;然后双击线条&#xff0c;再按delete键。

RPC的原理总结

一.RPC的引入 早期单机时代&#xff0c;一台电脑上运行多个进程&#xff0c;大家各干各的&#xff0c;老死不相往来。假如A进程需要一个画图的功能&#xff0c;B进程也需要一个画图的功能&#xff0c;程序员就必须为两个进程都写一个画图的功能。这不是整人么&#xff1f;于是就…

怎样实现MathType中带箭头向量的输入

2019独角兽企业重金招聘Python工程师标准>>> 一个向量可以有多种记法&#xff0c;如记作粗体的字母&#xff08;a&#xff09;&#xff0c;或在字母顶上加一小箭头→&#xff0c;或在字母下加波浪线~。如果给定向量的起点&#xff08;A&#xff09;和终点&#xff0…

1小时零基础赚一千,教你完成图书管理系统,不用打代码绝对学得会![完整全站教学 IVX 实战第四篇]

作者简介 作者名&#xff1a;1_bit 简介&#xff1a;CSDN博客专家&#xff0c;2020年博客之星TOP5&#xff0c;蓝桥签约作者。15-16年曾在网上直播&#xff0c;带领一批程序小白走上程序员之路。欢迎各位小白加我咨询我相关信息&#xff0c;迷茫的你会找到答案。 必看提示 项…

在河北当中学老师用不用考计算机,河北省教育厅出台新方案 师范生当教师也需考证...

保存到相册师范生当教师也需考证啦省教育厅公布方案&#xff0c;暑期后入学师范生要当老师都得拿教师资格证今年暑期后入学的师范类专业学生&#xff0c;申请教师资格需参加统一的教师资格考试。昨日&#xff0c;省教育厅官网公布《河北省中小学和幼儿园教师资格考试改革试点工…

案例:无人船测量点位数据+ArcGIS 10.6软件生成三维水下地形的两种方法

通常情况下,采用无人船进行水下地形测量,得到的是离散的,具有点号、日期、时间、东坐标(E)、北坐标(N)、水面高程、水下高程和水深等信息的点位数据,该数据一般由航带点位数据加水岸线组成,如下图所示: 原始点位数据格式如下: 下面讲解在ArcGIS软件中生成三维水下地…

Flutter之Align

1、Align介绍 Align的作为一个参数&#xff0c;设置子child的对齐方式&#xff0c;比如居中&#xff0c;左上&#xff0c;右下等多个对齐方向 2、部分源码和功能 const Align({Key key,this.alignment Alignment.center,this.widthFactor,this.heightFactor,Widget child,}) …

聊一聊容器生命周期

容器生命周期上图已经非常清晰地阐述了容器的生命周期&#xff0c;接下来就简单介绍下相关操作指令。创建容器docker create --name <container-name> <image-name>创建容器并等待运行。运行容器docker run -d --name <container-name> <image-name>其…

Android SQLite (一) 数据库简介

大家好&#xff0c;今天来介绍一下SQLite的相关知识&#xff0c;并结合Java实现对SQLite数据库的操作。 SQLite是D.Richard Hipp用C语言编写的开源嵌入式数据库引擎。它支持大多数的SQL92标准&#xff0c;并且可以在所有主要的操作系统上运行。 SQLite由以下几个部分组成&#…

租号显示服务器爆满怎么办,租号器环境异常怎么解决

玩网络游戏出现环境异常&#xff0c;怎么办…网络连接上但上不了网的原因以及相应的解决办法。一、检查是否密码错误输入连接密码的时候&#xff0c;如果密码比较长有可能会输错密码&#xff0c;所以建议大家再输入一次密码。如果有可能&#xff0c;直接使用复制粘贴的方式输入…

零基础“复刻”经典飞机大战小程序游戏【一篇文使用 IVX 轻松实战5】

作者简介 作者名&#xff1a;1_bit 简介&#xff1a;CSDN博客专家&#xff0c;2020年博客之星TOP5&#xff0c;蓝桥签约作者。15-16年曾在网上直播&#xff0c;带领一批程序小白走上程序员之路。欢迎各位小白加我咨询我相关信息&#xff0c;迷茫的你会找到答案。 必看提示 项…

【无人机组装与调试】第一章 概述

【无人机组装与调试】系列课程全集&#xff1a; 第一章 概述 第二章 关于新西达30A电调说明书的问题 第三章 舵机安装与调整 第四章 F450四轴装机实例-选择机型、需要的器材工具材料 第五章 无人机遥控器 第六章 电调、电池、电机 1.1 什么是无人机&#xff1f; 无人驾驶飞机是…