【算法图解|3】JavaScript 如何实现数组去重

数组去重方法老生常谈,既然是常谈,我也来谈谈。

也许我们首先想到的是使用 indexOf 来循环判断一遍,但在这个方法之前,让我们先看看最原始的方法:

var array = [1, 1, '1', '1'];function unique(array) {// res用来存储结果var res = [];for (var i = 0, arrayLen = array.length; i < arrayLen; i++) {for (var j = 0, resLen = res.length; j < resLen; j++ ) {if (array[i] === res[j]) {break;}}// 如果array[i]是唯一的,那么执行完循环,j等于resLenif (j === resLen) {res.push(array[i])}}return res;
}console.log(unique(array)); // [1, "1"]

 

在这个方法中,我们使用循环嵌套,最外层循环 array,里面循环 res,如果 array[i] 的值跟 res[j] 的值相等,就跳出循环,如果都不等于,说明元素是唯一的,这时候 j 的值就会等于 res 的长度,根据这个特点进行判断,将值添加进 res。

看起来很简单吧,之所以要讲一讲这个方法,是因为——————兼容性好!

我们可以用 indexOf 简化内层的循环:

var array = [1, 1, '1'];function unique(array) {var res = [];for (var i = 0, len = array.length; i < len; i++) {var current = array[i];if (res.indexOf(current) === -1) {res.push(current)}}return res;
}console.log(unique(array));

排序后去重,效率高

我们先将要去重的数组使用 sort 方法排序后,相同的值就会被排在一起,然后我们就可以只判断当前元素与上一个元素是否相同,相同就说明重复,不相同就添加进 res,

var array = [1, 1, '1'];function unique(array) {var res = [];var sortedArray = array.concat().sort();var seen;for (var i = 0, len = sortedArray.length; i < len; i++) {// 如果是第一个元素或者相邻的元素不相同if (!i || seen !== sortedArray[i]) {res.push(sortedArray[i])}seen = sortedArray[i];}return res;
}console.log(unique(array));

 

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

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

相关文章

angular 数字逗号分隔_angular 实现的输入框数字千分位及保留几位小数点功能示例...

摘要&#xff1a;这篇AngularJS栏目下的“angular 实现的输入框数字千分位及保留几位小数点功能示例”&#xff0c;介绍的技术点是“angular、保留几位小数、千分位、小数点、输入框、示例”&#xff0c;希望对大家开发技术学习和问题解决有帮助。本文实例讲述了angular 实现的…

单页应用程序的Spring Boot静态Web资源处理

诸如gulp和grunt之类的Javascript构建工具确实让我大吃一惊&#xff0c;我看着这些工具的构建脚本之一&#xff0c;发现很难理解它&#xff0c;无法想象从头开始编写其中一个构建脚本。 这就是yeoman出现的地方&#xff0c;它是一种非常方便的工具&#xff0c;它可以使用无数种…

Beta版本冲刺第二天

队伍CleanCode 031302505 黄晓辉031302223 翁瀚帅031302511 林培兴031302632 张衍坤031302536 苏丽玲一.完成的情况&#xff1a; 继续熟悉了github的使用&#xff0c;开始配置Tomcat服务器环境&#xff0c;增加了号码百事通的号码和游玩福州的一些资料&#xff0c;想要改进α版…

华字后面配什么字比较好_女孩叫华什么名字好听 华字和什么字搭配取名最好...

女孩叫华什么名字好听华鹭 华朦 华芮 华云 华徘 华葛 华馥华苹 华闵 华松 华娴 华红 华幽 华枫华双 华娉 华媚 华蝴 华胭 华瑷 华瑶华任 华智 华妮 华菀 华嫙 华笙 华楚华寐 华萱 华葵 华岱 华勤 华湘 华宜华咏 华欣 华娓 华穎 华兰 华汐 …

【算法图解|4】JavaScript 如何求数组的最大值和最小值

取出数组中的最大值或者最小值是开发中常见的需求 最原始的方法&#xff0c;莫过于循环遍历一遍&#xff1a; var arr [6, 4, 1, 8, 2, 11, 23];var result arr[0]; for (var i 1; i < arr.length; i) {result Math.max(result, arr[i]); } console.log(result); 通过…

elf 取路径_c – 获取主要可执行文件的ELF标题

由dlopen(0,RTLD_LAZY)返回的void *指针给出一个对应于主可执行文件的struct link_map *.调用dl_iterate_phdr也会在首次执行回调时返回主可执行文件的条目.你可能会被链接映射中的.l_addr 0这个事实所困惑,而使用dl_iterate_phdr的那个dlpi_addr 0.这正在发生,因为l_addr(和…

【算法图解|5】javaScript求两个数的最大公约数

思路&#xff1a;采用辗转相除的方法&#xff0c;用大的数去除以小的那个数&#xff0c;然后再用小的数去除以的得到的余数&#xff0c;一直这样递归下去&#xff0c; 直到余数为0时&#xff0c;最后的被除数就是两个数的最大公约数。 function getMaxCommonDivisor(a, b) {if …

多线程编程反模式_编程反模式

多线程编程反模式您是否曾经进行过代码审查&#xff0c;记录了非常高的WTF / m&#xff1f; 您是否想知道所有这些错误代码的原因是什么&#xff1f; 在大多数情况下&#xff0c;导致原因1的原因是使用设计和编码反模式。 如果您喜欢定义&#xff0c;请参见以下内容&#xff1…

JavaScript 如何求两个数的最小公倍数

1 .用辗转相除法求最大公约数 算法描述: m对n求余传给自己&#xff0c;再次求余, 若余数等于0 则 n 为最大公约数 2.最小公倍数 两个数的积 / 最大公约数 基本思想是采用将两个数相乘&#xff0c;然后除以它们的最大公约数 function getMinCommonMultiple(a, b){return a * b …

数据挖掘10大算法详细介绍

想初步了解下怎样数据挖掘&#xff0c;看到一篇不错的文章转载过来啦~ 转自:http://blog.jobbole.com/89037/ 在一份调查问卷中&#xff0c;三个独立专家小组投票选出的十大最有影响力的数据挖掘算法&#xff0c;今天我打算用简单的语言来解释一下。 一旦你知道了这些算法是什么…

孙叫兽带你了解腾讯位置服务的认证与接入,多种行业方案参考!

前言:腾讯位置服务为各类应用厂商和开发者提供领先的LBS服务和解决方案;有针对Web应用的JavaScript API, 适合手机端Native APP的各种SDK, WebService接口,适合小程序的插件和各类地图API等。 目录 接入指南 地图组件(H5) 地图javaScri

svn切换分支 如何判断 是否完成_SVN创建分支/合并分支/切换分支

在建立项目版本库时&#xff0c;可首先建好项目文件夹&#xff0c;并在其中建立trunk, branches, tags三个空的子目录。这样在trunk中开始进行开发trunk是主分支&#xff0c;是日常开发进行的地方。branches是分支。一些阶段性的release版本&#xff0c;这些版本是可以继续进行…

java文件读写操作类

借鉴了项目以前的文件写入功能&#xff0c;实现了对文件读写操作的封装 仅仅需要在读写方法传入路径即可&#xff08;可以是绝对或相对路径&#xff09; 以后使用时&#xff0c;可以在此基础上改进&#xff0c;比如&#xff1a; 写操作&#xff1a; 1&#xff0c;对java GUI中文…

java递归基础掉用_Java递归基础

java递归基础掉用对于那些不知道递归是什么的人&#xff08;并且像个大笑者一样&#xff09;&#xff0c;请单击以下链接&#xff1a;Google搜索&#xff1a;递归&#xff0c;然后单击“您的意思是……”项。 希望您终于弄清楚了递归是指其自身的任何内容&#xff08;如果不是&…

圣诞节,程序员应该给女朋友送一个线上圣诞树

前言:圣诞节虽然不是中国的传统节日,但当下很多时髦的年轻人却很喜欢过这个欢乐的节日,并乐于打造参与属于这个节日的仪式感。 除了所知的圣诞老人、圣诞树、互送礼物、吃大餐等传统习俗外,其实程序员能为今天的节日增加一些特别的环节。 圣诞树下载:https://download.csd…

maven 按业务拆分模块_Maven模块拆分方法

一个大项目经常要拆分成多个小模块分开打包&#xff0c;Maven是可以支持模块拆分的。可以包含(父模块即项目包含子模块)&#xff0c;也可以并行(父模块和子模块是平级的)。推荐用包含方式&#xff0c;更清晰&#xff0c;更简单一些。首先建个空项目&#xff0c;只要个pom.xml&a…

用户注册,报修

一、需求分析 &#xff08;1&#xff09;还没有注册的客户&#xff0c;可以进入注册界面进行注册。 &#xff08;2&#xff09;新建一个报修表&#xff0c;名字为repair_info0&#xff0c;列有用户名、报修类型、报修地点、报修内容&#xff0c;报修日期和时间、用户报修次数。…

Java SE 8新功能介绍:使用Streams API处理集合

使用Java SE 8 Streams的代码更干净&#xff0c;易读且功能强大..... 在“ Java SE 8新功能介绍”系列的这篇文章中&#xff0c;我们将深入解释和探索代码&#xff0c;以了解如何使用流遍历集合&#xff0c;从集合和数组创建流&#xff0c;聚合流值。 在上一篇文章“ Lambda的…

在HTML中使用css3实现雪人动画效果

背景:圣诞节又到了,拿什么来哄女朋友开心? 项目结构: html: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xht…

mysql 释放内存_mysql查询后释放内存

我正在使用CodeIgniter从远程服务器导入大表.我一次将查询分成1000行.这将是一个在后台运行的cron脚本.$userDB是本地数据库对象,而$remoteDB是远程数据库对象private function fetch_remote_db_table($remoteDB, $remoteTable, $localTable FALSE){$success FALSE;$returnOb…