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,一经查实,立即删除!

相关文章

GIS宣传片《地理空间信息革命》视频全集

《地理空间信息革命》第一集 《地理空间信息革命》第一集&#xff1a;介绍了全球定位系统&#xff08;GPS&#xff09;&#xff0c;地理空间信息系统&#xff08;GIS&#xff09;和数字测绘和地理空间技术的历史和应用。 《地理空间信息革命》第二集 《地理空间信息革命》第二集…

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…

Android之解决APP奔溃重启导致Fragment白屏问题

1、问题 问题APP奔溃重启导致依附的Fragment白屏问题 2、分析 app奔溃重启Activity肯定更新了,但是依附在Activity里面的fragment有缓存,用的是以前的activity的content,所以获取到是空的, 就会导致fragment依附失败,我们只需要activity不要保存当前fragment就行,直接不…

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

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

Linux学习一天一个命令(2)[cd命令]

Linux cd 命令可以说是Linux中最基本的命令语句&#xff0c;其他的命令语句要进行操作&#xff0c;都是建立在使用 cd 命令上的。所以&#xff0c;学习Linux 常用命令&#xff0c;首先就要学好 cd 命令的使用方法技巧。1. 命令格式&#xff1a;cd [目录名]2. 命令功能&#xff…

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

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

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

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

在Esxi 5.1虚机中安装OEM服务器系统

需要在vmx配置文件中&#xff0c;增加一行SMBIOS.reflectHost "TRUE" 本文转自daniel8294 51CTO博客&#xff0c;原文链接&#xff1a;http://blog.51cto.com/acadia627/1260215&#xff0c;如需转载请自行联系原作者

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

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

CentOS5.11安装Mac桌面主题

首先下载Mac4Lin_Install_v1.0.zip 给出个下载地址http://www.kuaipan.cn/file/id_60980504015219653.htm 最好切换到普通用户进行操作&#xff0c;安装过程需要几次确认&#xff0c;推荐n [weilocalhost 桌面]$>>> unzip Mac4Lin_I…

java基础题,错

Which statement declares a variable a which is suitable for referring to an array of 50 string objects?正确答案: B C F 你的答案: D F (错误) char a[][]; String a[]; String[]a; Object a[50]; String a[50]; Object a[]; BCF 在java 中&#xff0c;声明一个数组时…

C# 第一个LINQ 查询

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

佳鑫诺计算机模拟卷答案,微机原理练习册答案佳鑫诺).docx

PAGE 17计算机系统1&#xff0e;简述名词的概念&#xff1a;微处理器、微型计算机、微型计算机系统。答&#xff1a;(1)微处理器&#xff1a;微处理器(Microprocessor)简称μP或MP&#xff0c;或CPU。CPU是采用大规模和超大规模集成电路技术将算术逻辑部件ALU(Arithmetic Logic…

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键。

Android之解决底部4个TextView占比例大小不一致问题

1、问题 底部4个TextView切换多语言了&#xff0c;占据的比例大小不一致。 2、原因 虽然在每个LinearLayout里面写了 android:layout_weight"1" 但是我还加了 android:layout_width"wrap_content" 感觉被自己傻哭了 3、 解决办法 把 android:layo…

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;迷茫的你会找到答案。 必看提示 项…