js数组去重、冒泡排序

数组去重:

方法1、双重for循环---最笨的方法

var arr = [1, 2, 3,4 ,5,6, 4, 3, 8, 1]function newArrFn (arr) {// 创建一个新的空数组let newArr = []for(let i = 0;i<arr.length;i++){// 设置一个开关,如果是true,就存进去,不是就不存let  flag = truefor(let j = 0;j<newArr.length;j++){// 原数组和新数组作比较,如果一致,开关变为 falsearr[i] === newArr[j] ? flag = false : flag};flag ? newArr.push(arr[i]) : newArr};return newArr}console.log(newArrFn(arr));

方法2、for循环 + findIndex

var arr = [1, 2, 3,4 ,5,6, 4, 3, 8, 1]function newArrFn (arr) {let newArr = []for(let i = 0;i<arr.length;i++){newArr.indexOf(arr[i]) === -1 ? newArr.push(arr[i]) : newArr};return newArr}console.log(newArrFn(arr));

方法3、sort 排序

首先利用 sort方法进行排序。进行循环,如果原数组的第 i 项和新数组的 i - 1 项不一致,就push进去。

var arr = [1, 2, 3,4 ,5,6, 4, 3, 8, 1]function newArrFn (arr) {arr = arr.sort()let newArr = []for(let i = 0;i<arr.length;i++){arr[i] === arr[i-1] ? newArr : newArr.push(arr[i])};return newArr}console.log(newArrFn(arr));

方法4、Set

ES6中新增了数据类型Set,Set的一个最大的特点就是数据不重复。Set函数可以接受一个数组(或类数组对象)作为参数来初始化,利用该特性也能做到给数组去重。

var arr = [1, 2, 3,4 ,5,6, 4, 3, 8, 1]function newArrFn (arr) {// .new Set方法,返回是一个类数组,需要结合 ...运算符,转成真实数组return ([...new Set(arr)])}console.log(newArrFn(arr));

方法5、set + Array.from

利用 set数据不重复的特点,结合 Array.from

var arr = [1, 2, 3,4 ,5,6, 4, 3, 8, 1]function newArrFn (arr) {// .new Set方法,返回是一个类数组,需要结合 Array.from ,转成真实数组return (Array.from(new Set(arr)) )}console.log(newArrFn(arr));

方法6、filter + indexOf

indexOf,可以检测某一个元素在数组中出现的位置,找到返回该元素的下标,没找到返回 -1

var arr = [1, 2, 3,4 ,5,6, 4, 3, 8, 1]function newArrFn (arr) {// 利用indexOf检测元素在数组中第一次出现的位置是否和元素现在的位置相等,// 如果相等,说明数组中没有重复的return Array.prototype.filter.call(arr, function (item, index) { return arr.indexOf(item) === index})}console.log(newArrFn(arr));

方法7、includes

利用 includes 检查新数组是否包含原数组的每一项。 如果不包含,就push进去

var arr = [1, 2, 3,4 ,5,6, 4, 3, 8, 1]function newArrFn (arr) {// 利用includes 检查新数组是否包含原数组的每一项// 如果不包含,就push进去let newArr = []for(let i = 0;i<arr.length;i++){newArr.includes(arr[i]) ? newArr:  newArr.push(arr[i]) };return newArr}console.log(newArrFn(arr));

方法 8、 for + object

利用对象属性名不能重复这一特点。如果对象中不存在,就可以给 push 进去

var arr = [1, 2, 3,4 ,5,6, 4, 3, 8, 1]function newArrFn (arr) {// 利用对象属性名不能重复这一特点// 如果对象中不存在,就可以给 push 进去let newArr = []let obj = {}for(let i = 0;i<arr.length;i++){if (!obj[arr[i]]) {newArr.push(arr[i])obj[arr[i]] = 1} else {obj[arr[i]] ++}};return newArr}console.log(newArrFn(arr));

方法9、for + splice

利用 splice 进行切割

var arr = [1, 2, 3,4 ,5,6, 4, 3, 8, 1]function newArrFn (arr) {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--}};}return arr}console.log(newArrFn(arr));

方法10、filter + indexOf

利用 filter 过滤 配合 indexOf 查找元素

var arr = [1, 2, 3,4 ,5,6, 4, 3, 8, 1]function newArrFn (arr) {return arr.filter((item, index) => {return arr.indexOf(item) === index})}console.log(newArrFn(arr));

方法11、Map

利用数据结构存值的特点

var arr = [1, 2, 3,4 ,5,6, 4, 3, 8, 1]function newArrFn (arr) {let newArr = []let map = new Map()for(let i = 0;i<arr.length;i++){// 如果 map里面不包含,就设置进去if (!map.has(arr[i])) {map.set(arr[i], true)newArr.push(arr[i])}};return newArr}console.log(newArrFn(arr));

 方法12:reduce

var arr = [1, 2, 3,4 ,5,6, 4, 3, 8, 1]function newArrFn (arr) {let newArr = []return  arr.reduce((prev, next,index, arr) => {// 如果包含,就返回原数据,不包含,就把新数据追加进去 return newArr.includes(next) ? newArr :  newArr.push(next)}, 0)}console.log(newArrFn(arr));

 ---------------------------------线 ---------------------------------

冒泡排序:

 方法1

比较相邻的两个元素,如果前一个比后一个大,则交换位置。
第一轮把最大的元素放到了最后面。
由于每次排序最后一个都是最大的,所以之后按照步骤1排序最后一个元素不用比

function arr_sort(data) {for(var i=0;i<data.length;i++){for(var p=0;p<data.length-i-1;p++){if(arr[p]<data[p+1]){var temp = data[p];data[p] = data[p+1];data[p+1] = temp;}}
}
arr_sort(data)

 方法2

声明一个变量标记顺数是否发生变化

function arr_sort(data) {let n = data.lengthlet flag = true // 标记顺数是否发生变化let swapwhile(flag) {flag = falsefor(var j = 1; j<n; j++) {if(data[j - 1] > data[j]){swap = data[j - 1]data[j - 1] = data[j]data[j] = swapflag = true}}n--}return data
}
arr_sort(arr)

 方法3

第一遍排序时将数据分成两部分,一部分比另一部分的所有数据都要小。然后递归调用,在两边都实行排序。 

	function arr_sort(data) {if(data.length <= 1) {return arr}var pIndex = Math.floor(data.length/2)var p = data.splice(pIndex, 1)[0]var left = []var right = []for(var i = 0; i<data.length; i++) {if(data[i] < p) {left.push(arr[i])} else {right.push(arr[i])}}return arr_sort(left).concat([p], arr_sort(right))}

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

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

相关文章

Nuget发布Dll

今天要开始写ViewModel了&#xff0c;写完之后系统里的ViewModel都汇总到我这里&#xff0c;然后由我负责ViewModel的发布跟维护&#xff0c;所以Nuget发布Dll就要熟练啦~ 一&#xff0c;安装工具 1&#xff0c;Nuget Package Manager 2,NuGet.exe 下载地址为&#xff1a;http:…

技巧/诀窍:在ASP.NET中重写URL(转)

技巧/诀窍&#xff1a;在ASP.NET中重写URL 【原文地址】Tip/Trick: Url Rewriting with ASP.NET 【原文发表日期】 Monday, February 26, 2007 9:27 PM 经常有人请我指导应该如何动态地“重写”URL&#xff0c;以在他们的ASP.NETweb应用中发布比较干净的URL端点。这个博客帖…

[导入]竟然支持OpenGL ES!

今天意外的发现&#xff0c;原来S60 3rd原生支持OpenGL ES&#xff0c;这下又给我多了乐趣了~~可是很遗憾&#xff0c;我的E50性能不强劲&#xff0c;还是有独立显卡的N93强悍测试达到442 Frames&#xff0c;而我的E50只有可怜的81 Frames。还好&#xff0c;第三版的性能确实要…

2012 winter training @HIT Day 2 解题报告

今天第二天&#xff0c;主要练习二分和枚举。其实我突然发现&#xff0c;当做题突然卡主的时候&#xff0c;不妨想想今天练习的是什么内容…… 传送门http://acm.hit.edu.cn/hoj/contest/view?id100128 Problem A&#xff1a;Crossed Ladders 此题导致本人郁闷一整天。。从哪说…

如何修改myeclipse中web项目的工作路径或默认路径

如何修改myeclipse中web项目的工作路径或默认路径 博客分类&#xff1a; J2EE开发技术指南安装好myeclipse后&#xff0c;第一次启动myeclipse时&#xff0c;都会弹出会弹出Workspace Launcher对话框&#xff0c;叫你设置myeclipse工作路径。通常我们设置完了后&#xff0c;为了…

FreeRTOS操作系统,在按键中断函数中恢复被挂起的任务,程序卡死的原因和解决办法...

出现问题场景&#xff1a;作为刚接触FreeRTOS实时操作系统的菜鸟&#xff0c;我在练习一个程序功能&#xff1a;按键3按下&#xff0c;将LED闪烁的任务挂起&#xff1b;按键4按下&#xff0c;将LED闪烁的任务恢复到就绪。按键使用外部中断。恢复就绪的语句是xTaskResumeFromISR…

无法连接到远程的SQL SERVER2000

1、先保证ping通 2、在dos下写入telnet ip 1433不会报错 3、用ip连如企业管理器&#xff1a; 企业管理器-->右键SQlserver组-->新建sqlserver注册-->下一步-->写入远程实例名&#xff08;IP,机器名&#xff09;-->下一步-->…

妙趣横生算法 3:寻找相同元素的指针

实例说明 在已知两个从小到大的有序的数表中寻找出现的相同元素在第一个数表中的指针。 运行结果 实例解析 设两个数表的首元素指针分别为pa和pb,两个数表分别有元素an和bn个。另外&#xff0c;引入两个指针变量ca和cb,分别指向两个数表的当前访问元素。由于两个数表从小到大有…

PostgreSQL学习手册(PL/pgSQL过程语言)【转】

原文http://www.cnblogs.com/stephen-liu74/archive/2012/06/06/2312759.html 一、概述&#xff1a; PL/pgSQL函数在第一次被调用时&#xff0c;其函数内的源代码(文本)将被解析为二进制指令树&#xff0c;但是函数内的表达式和SQL命令只有在首次用到它们的时候&#xff0c;…

Nginx 笔记与总结(14)expires 缓存设置

设置缓存&#xff0c;可以提高网站性能。 当网站的部分内容&#xff0c;比如新闻站的图片&#xff0c;一旦发布就不太可能发生更改&#xff0c;此时需要用户在访问一次页面之后&#xff0c;把该页面的图片缓存在用户的浏览器端一段时间&#xff0c;就可以用到 nginx 的 expires…

WP7应用开发笔记(8) IP输入框控件

因为需要在手机上配置IP&#xff0c;我需要一个界面输入IP地址&#xff0c;虽然直接使用TextBox&#xff0c;但是这样不太友好&#xff0c;我希望能够有和Windows网络设置上一样的IP输入框。所以决定写一个自定义控件。 设计控件外观 4个TextBox和3个显示“.”的TextBlock就可以…

C#并发实战Parallel.ForEach使用

前言&#xff1a;最近给客户开发一个伙食费计算系统&#xff0c;大概需要计算2000个人的伙食。需求是按照员工的预定报餐计划对消费记录进行检查&#xff0c;如有未报餐有刷卡或者有报餐没刷卡的要进行一定的金额扣减等一系列规则。一开始我的想法比较简单&#xff0c;直接用一…

[MSDN]ASP.NET MVC2(5)MVCRoute和urls

说明&#xff1a;本内容来自微软的webcast&#xff0c;讲师为苏鹏。视频没有书方便(想看哪页就看哪页)&#xff0c;所以抄录要点和老师语录。 内容介绍 - url和routes介绍 - routes匹配url的工作方式 - 使用routes Router对象mvc运转的核心。 预备知…

一个、说到所有的扩展指标

版权声明&#xff1a;本文博客原创文章&#xff0c;博客&#xff0c;未经同意&#xff0c;不得转载。

张小娴的文章,喜欢的,贴来存档

爱情是不能报复的爱情是不能报复的。一旦采取报复行动&#xff0c;你只会失去它。有些女人很傻&#xff0c;她以为以牙还牙就可以挽回一段爱情。男朋友在外面有女人&#xff0c;于是&#xff0c;她也去找男人。然而&#xff0c;两者的分别却是她男朋友找自己喜欢的女人&#xf…

MessagePack Java Jackson Dataformat 在 Map 中不使用 String 为 Key 的序列化

当你希望在 Map 中不使用 String 为 Key&#xff0c;那么你需要使用 MessagePackKeySerializer 来为 key 进行序列化。 本测试方法&#xff0c;可以在 https://github.com/cwiki-us-demo/serialize-deserialize-demo-java/blob/master/src/test/java/com/insight/demo/serializ…

批量获取远程计算机MAC

功能及用途 用于采集局域网所有计算机信息主要是mac地址&#xff0c;ip地址&#xff0c;主机名。 格式化读写函数 fprintf()格式化写 fscanf()格式化读 使用说明 IP文件&#xff1a;ip.txt IP文件格式&#xff1a;ip空格其他信息 IP文件和该执行文件放同一目录 代码 // ALLMAC.…

网络通信和网络编程

一、软件结构 C/S Client/Server B/S Browser/Server 二、网络通信协议 1、协议分类 UDP 应用&#xff1a; TCP/IP 三、网络编程三要素 1、协议&#xff08;UDP、TCP/IP&#xff09; 2、IP地址 3、端口号 转载于:https://www.cnblogs.com/wmqiang/p/11333351.html

[Android] 输入系统(二)

在上一篇文章的最后&#xff0c;我们发现InputDispatcher是调用了InputChannel->sendMessage把键值发送出去&#xff0c;那么相应的&#xff0c;也有接收键值的地方。接收函数是InputChannel->receiveMessage。 在InputConsumer::consume内找到了receiveMessage&#xff…

字体--Ubuntu手记之系统配置

今天上午终于实现了一次无windows办公。但是一上午下来竟然感到有些眼睛花&#xff0c;也不知道是因为ubunbtu的字体没配好&#xff0c;于是开始琢磨着下几个字体&#xff0c;还是照老规矩&#xff0c;先到社区里面搜。找到一个比较好的地址里面的字体比较多&#xff0c;"…