coding++:JS数组去重的几种常见方法
一、简单的去重方法
- // 最简单数组去重法
- /*
- * 新建一新数组,遍历传入数组,值不在新数组就push进该新数组中
- * IE8以下不支持数组的indexOf方法
- * */
- function uniq(array){
- var temp = []; //一个新的临时数组
- for(var i = 0; i < array.length; i++){
- if(temp.indexOf(array[i]) == -1){
- temp.push(array[i]);
- }
- }
- return temp;
- }
- var aa = [1,2,2,4,9,6,7,5,2,3,5,6,5];
- console.log(uniq(aa));
二、对象键值法去重
- /*
- * 速度最快, 占空间最多(空间换时间)
- *
- * 该方法执行的速度比其他任何方法都快, 就是占用的内存大一些。
- * 现思路:新建一js对象以及新数组,遍历传入数组时,判断值是否为js对象的键,
- * 不是的话给对象新增该键并放入新数组。
- * 注意点:判断是否为js对象键时,会自动对传入的键执行“toString()”,
- * 不同的键可能会被误认为一样,例如n[val]-- n[1]、n["1"];
- * 解决上述问题还是得调用“indexOf”。*/
- function uniq(array){
- var temp = {}, r = [], len = array.length, val, type;
- for (var i = 0; i < len; i++) {
- val = array[i];
- type = typeof val;
- if (!temp[val]) {
- temp[val] = [type];
- r.push(val);
- } else if (temp[val].indexOf(type) < 0) {
- temp[val].push(type);
- r.push(val);
- }
- }
- return r;
- }
- var aa = [1,2,"2",4,9,"a","a",2,3,5,6,5];
- console.log(uniq(aa));
三、排序后相邻去除法
- /*
- * 给传入数组排序,排序后相同值相邻,
- * 然后遍历时,新数组只加入不与前一值重复的值。
- * 会打乱原来数组的顺序
- * */
- function uniq(array){
- array.sort();
- var temp=[array[0]];
- for(var i = 1; i < array.length; i++){
- if( array[i] !== temp[temp.length-1]){
- temp.push(array[i]);
- }
- }
- return temp;
- }
- var aa = [1,2,"2",4,9,"a","a",2,3,5,6,5];
- console.log(uniq(aa));
四、数组下标法
- /*
- *
- * 还是得调用“indexOf”性能跟方法1差不多,
- * 实现思路:如果当前数组的第i项在当前数组中第一次出现的位置不是i,
- * 那么表示第i项是重复的,忽略掉。否则存入结果数组。
- * */
- function uniq(array){
- var temp = [];
- for(var i = 0; i < array.length; i++) {
- //如果当前数组的第i项在当前数组中第一次出现的位置是i,才存入数组;否则代表是重复的
- if(array.indexOf(array[i]) == i){
- temp.push(array[i])
- }
- }
- return temp;
- }
- var aa = [1,2,"2",4,9,"a","a",2,3,5,6,5];
- console.log(uniq(aa));
五、优化遍历数组法
- // 思路:获取没重复的最右一值放入新数组
- /*
- * 推荐的方法
- *
- * 方法的实现代码相当酷炫,
- * 实现思路:获取没重复的最右一值放入新数组。
- * (检测到有重复值时终止当前循环同时进入顶层循环的下一轮判断)*/
- function uniq(array){
- var temp = [];
- var index = [];
- var l = array.length;
- for(var i = 0; i < l; i++) {
- for(var j = i + 1; j < l; j++){
- if (array[i] === array[j]){
- i++;
- j = i;
- }
- }
- temp.push(array[i]);
- index.push(i);
- }
- console.log(index);
- return temp;
- }
- var aa = [1,2,2,3,5,3,6,5];
- console.log(uniq(aa));
coding++:JS数组去重的几种常见方法的更多相关文章
- JS数组去重的几种常见方法
JS数组去重的几种常见方法 一.简单的去重方法 // 最简单数组去重法 /* * 新建一新数组,遍历传入数组,值不在新数组就push进该新数组中 * IE8以下不支持数组的indexOf方法 * */ ...
- JS去重的几种常见方法
JS数组去重的几种常见方法 一.简单的去重方法 // 最简单数组去重法 /* * 新建一新数组,遍历传入数组,值不在新数组就push进该新数组中 * IE8以下不支持数组的indexOf方法 * */ ...
- js数组去重的4种方法
js数组去重,老生长谈,今天对其进行一番归纳,总结出来4种方法 贴入代码前 ,先对浏览器Array对象进行支持indexOf和forEach的polyfill Array.prototype.inde ...
- JS数组去重的6种算法实现
1.遍历数组法 最简单的去重方法,实现思路:新建一新数组,遍历传入数组,值不在新数组就加入该新数组中:注意点:判断值是否在数组的方法"indexOf"是ECMAScript5 方法 ...
- JS 数组去重的几种方式
JS 常见的几种数组去重方法 一.最简单方法(indexOf 方法) 实现思路:新建一个数组,遍历要去重的数组,当值不在新数组的时候(indexOf 为 -1)就加入该新数组中: function u ...
- Js 数组去重的几种方法总结
去重是开发中经常会碰到的一一个热点问题,不过目前项目中碰到的情况都是后台接口使用SQL去重,简单高效,基本不会让前端处理去重.那么前端处理去重会出现什么情况呢?假如每页显示10条不同的数 ...
- JS数组去重的9种方法(包括去重NaN和复杂数组类型)
其实网上已经有很多js数组的去重方法,但是我看了很多篇并自己通过代码验证,发现都有一些缺陷,于是在研究多篇代码之后,自己总结了9种方法,如果有哪里不对请及时纠正我哈~ 转载请表明出处 测试代码 let ...
- js 数组去重的几种方式及原理
let arr = [1,1,'true','true',true,true,15,15,false,false, undefined,undefined, null,null, NaN, NaN,' ...
- js数组去重的几种方法
1.遍历数组法 最简单的去重方法, 实现思路:新建一新数组,遍历传入数组,值不在新数组就加入该新数组中:注意点:判断值是否在数组的方法“indexOf”是ECMAScript5 方法,IE8以下不支持 ...
随机推荐
- 如何看待Java是世界上最好的语言?
Java出现二十多年以来,一直都是主流的开发语言,Java创建于 1995 年,在 20多年的发展历程中,Java 已经证明自己是用于自定义软件开发的顶级通用编程语言. Java 广泛应用于科学教育. ...
- 大厂面试官最常问的@Configuration+@Bean(JDKConfig编程方式)
大厂面试官最常问的@Configuration+@Bean(JDKConfig编程方式) 现在大部分的Spring项目都采用了基于注解的配置,采用了@Configuration 替换标签的做法.一 ...
- vue项目开发,用webpack配置解决跨域问题
今天在本地开发时候碰到了跨域的问题,突然觉着跨域问题在所难免啊,之前没有没有碰到总觉着解决跨域很高大上的样纸,其实就是受限于网络的同源策略,跨域前后端都可以进行处理. 1,后端更改header hea ...
- day1 执行用例
故事1 今天的工作,是执行已写好的"回馈"模块用例 每个子模块的用例都有优先级之分 肯定要先进行通过性测试,验证正常流 因此,我优先执行各个子模块优先级最高的那条用例,进行通过性测 ...
- ubuntu16.04 + caffe + SSD 硬件配置
搞了几个月,终于把SSD试通了,不是科班出身的就是弯路多啊.几个月才跑通了caffe + ssd,痛苦至极,好在柳暗花明.好了,废话不多说,入正题. SSD作为object detection的论文, ...
- drf(请求封装/认证/权限/节流)
1.请求的封装 class HttpRequest(object): def __init__(self): pass @propery def GET(self): pass @propery de ...
- 搭建私有 Nuget 服务器教程(1)
对于 .NET 开发者来说,nuget 是必不可少的程序包管理工具.相应地,大部分开发团队都需要在内部搭建 Nuget 服务器,以管理私有 nupkg 包.本教程所使用的 Nuget 服务器,不是微软 ...
- 网页中三角型的CSS实现
我们在使用CSS框架的时候,经常会用到下拉框组件,一般该组件里面有个下三角.很多网上用到三角形,如图所示,这个三角形是如何实现的呢? 1.使用CSS可以实现,先来复习一CSS盒子模型相关知识.给出如下 ...
- Leetcode 1160: 拼写单词
给你一份『词汇表』(字符串数组) words 和一张『字母表』(字符串) chars. 假如你可以用 chars 中的『字母』(字符)拼写出 words 中的某个『单词』(字符串),那么我们就认为你掌 ...
- yarn报错error An unexpected error occurred:****ETIMEDOUT
起因 在一个美好的下午,我敲击键盘输入quasar create Tangerine_Reception 我自豪的使用yarn作为包管理器,本以为万事无忧,不用担心出现npm的种种异常了...... ...