一、简单的去重方法

  1. // 最简单数组去重法
  2. /*
  3. * 新建一新数组,遍历传入数组,值不在新数组就push进该新数组中
  4. * IE8以下不支持数组的indexOf方法
  5. * */
  6. function uniq(array){
  7. var temp = []; //一个新的临时数组
  8. for(var i = 0; i < array.length; i++){
  9. if(temp.indexOf(array[i]) == -1){
  10. temp.push(array[i]);
  11. }
  12. }
  13. return temp;
  14. }
  15.  
  16. var aa = [1,2,2,4,9,6,7,5,2,3,5,6,5];
  17. console.log(uniq(aa));

二、对象键值法去重

  1. /*
  2. * 速度最快, 占空间最多(空间换时间)
  3. *
  4. * 该方法执行的速度比其他任何方法都快, 就是占用的内存大一些。
  5. * 现思路:新建一js对象以及新数组,遍历传入数组时,判断值是否为js对象的键,
  6. * 不是的话给对象新增该键并放入新数组。
  7. * 注意点:判断是否为js对象键时,会自动对传入的键执行“toString()”,
  8. * 不同的键可能会被误认为一样,例如n[val]-- n[1]、n["1"];
  9. * 解决上述问题还是得调用“indexOf”。*/
  10. function uniq(array){
  11. var temp = {}, r = [], len = array.length, val, type;
  12. for (var i = 0; i < len; i++) {
  13. val = array[i];
  14. type = typeof val;
  15. if (!temp[val]) {
  16. temp[val] = [type];
  17. r.push(val);
  18. } else if (temp[val].indexOf(type) < 0) {
  19. temp[val].push(type);
  20. r.push(val);
  21. }
  22. }
  23. return r;
  24. }
  25.  
  26. var aa = [1,2,"2",4,9,"a","a",2,3,5,6,5];
  27. console.log(uniq(aa));

三、排序后相邻去除法

  1. /*
  2. * 给传入数组排序,排序后相同值相邻,
  3. * 然后遍历时,新数组只加入不与前一值重复的值。
  4. * 会打乱原来数组的顺序
  5. * */
  6. function uniq(array){
  7. array.sort();
  8. var temp=[array[0]];
  9. for(var i = 1; i < array.length; i++){
  10. if( array[i] !== temp[temp.length-1]){
  11. temp.push(array[i]);
  12. }
  13. }
  14. return temp;
  15. }
  16.  
  17. var aa = [1,2,"2",4,9,"a","a",2,3,5,6,5];
  18. console.log(uniq(aa));

四、数组下标法

  1. /*
  2. *
  3. * 还是得调用“indexOf”性能跟方法1差不多,
  4. * 实现思路:如果当前数组的第i项在当前数组中第一次出现的位置不是i,
  5. * 那么表示第i项是重复的,忽略掉。否则存入结果数组。
  6. * */
  7. function uniq(array){
  8. var temp = [];
  9. for(var i = 0; i < array.length; i++) {
  10. //如果当前数组的第i项在当前数组中第一次出现的位置是i,才存入数组;否则代表是重复的
  11. if(array.indexOf(array[i]) == i){
  12. temp.push(array[i])
  13. }
  14. }
  15. return temp;
  16. }
  17.  
  18. var aa = [1,2,"2",4,9,"a","a",2,3,5,6,5];
  19. console.log(uniq(aa));

五、优化遍历数组法

  1. // 思路:获取没重复的最右一值放入新数组
  2. /*
  3. * 推荐的方法
  4. *
  5. * 方法的实现代码相当酷炫,
  6. * 实现思路:获取没重复的最右一值放入新数组。
  7. * (检测到有重复值时终止当前循环同时进入顶层循环的下一轮判断)*/
  8. function uniq(array){
  9. var temp = [];
  10. var index = [];
  11. var l = array.length;
  12. for(var i = 0; i < l; i++) {
  13. for(var j = i + 1; j < l; j++){
  14. if (array[i] === array[j]){
  15. i++;
  16. j = i;
  17. }
  18. }
  19. temp.push(array[i]);
  20. index.push(i);
  21. }
  22. console.log(index);
  23. return temp;
  24. }
  25.  
  26. var aa = [1,2,2,3,5,3,6,5];
  27. console.log(uniq(aa));

coding++:JS数组去重的几种常见方法的更多相关文章

  1. JS数组去重的几种常见方法

    JS数组去重的几种常见方法 一.简单的去重方法 // 最简单数组去重法 /* * 新建一新数组,遍历传入数组,值不在新数组就push进该新数组中 * IE8以下不支持数组的indexOf方法 * */ ...

  2. JS去重的几种常见方法

    JS数组去重的几种常见方法 一.简单的去重方法 // 最简单数组去重法 /* * 新建一新数组,遍历传入数组,值不在新数组就push进该新数组中 * IE8以下不支持数组的indexOf方法 * */ ...

  3. js数组去重的4种方法

    js数组去重,老生长谈,今天对其进行一番归纳,总结出来4种方法 贴入代码前 ,先对浏览器Array对象进行支持indexOf和forEach的polyfill Array.prototype.inde ...

  4. JS数组去重的6种算法实现

    1.遍历数组法 最简单的去重方法,实现思路:新建一新数组,遍历传入数组,值不在新数组就加入该新数组中:注意点:判断值是否在数组的方法"indexOf"是ECMAScript5 方法 ...

  5. JS 数组去重的几种方式

    JS 常见的几种数组去重方法 一.最简单方法(indexOf 方法) 实现思路:新建一个数组,遍历要去重的数组,当值不在新数组的时候(indexOf 为 -1)就加入该新数组中: function u ...

  6. Js 数组去重的几种方法总结

           去重是开发中经常会碰到的一一个热点问题,不过目前项目中碰到的情况都是后台接口使用SQL去重,简单高效,基本不会让前端处理去重.那么前端处理去重会出现什么情况呢?假如每页显示10条不同的数 ...

  7. JS数组去重的9种方法(包括去重NaN和复杂数组类型)

    其实网上已经有很多js数组的去重方法,但是我看了很多篇并自己通过代码验证,发现都有一些缺陷,于是在研究多篇代码之后,自己总结了9种方法,如果有哪里不对请及时纠正我哈~ 转载请表明出处 测试代码 let ...

  8. js 数组去重的几种方式及原理

    let arr = [1,1,'true','true',true,true,15,15,false,false, undefined,undefined, null,null, NaN, NaN,' ...

  9. js数组去重的几种方法

    1.遍历数组法 最简单的去重方法, 实现思路:新建一新数组,遍历传入数组,值不在新数组就加入该新数组中:注意点:判断值是否在数组的方法“indexOf”是ECMAScript5 方法,IE8以下不支持 ...

随机推荐

  1. 如何看待Java是世界上最好的语言?

    Java出现二十多年以来,一直都是主流的开发语言,Java创建于 1995 年,在 20多年的发展历程中,Java 已经证明自己是用于自定义软件开发的顶级通用编程语言. Java 广泛应用于科学教育. ...

  2. 大厂面试官最常问的@Configuration+@Bean(JDKConfig编程方式)

    大厂面试官最常问的@Configuration+@Bean(JDKConfig编程方式)   现在大部分的Spring项目都采用了基于注解的配置,采用了@Configuration 替换标签的做法.一 ...

  3. vue项目开发,用webpack配置解决跨域问题

    今天在本地开发时候碰到了跨域的问题,突然觉着跨域问题在所难免啊,之前没有没有碰到总觉着解决跨域很高大上的样纸,其实就是受限于网络的同源策略,跨域前后端都可以进行处理. 1,后端更改header hea ...

  4. day1 执行用例

    故事1 今天的工作,是执行已写好的"回馈"模块用例 每个子模块的用例都有优先级之分 肯定要先进行通过性测试,验证正常流 因此,我优先执行各个子模块优先级最高的那条用例,进行通过性测 ...

  5. ubuntu16.04 + caffe + SSD 硬件配置

    搞了几个月,终于把SSD试通了,不是科班出身的就是弯路多啊.几个月才跑通了caffe + ssd,痛苦至极,好在柳暗花明.好了,废话不多说,入正题. SSD作为object detection的论文, ...

  6. drf(请求封装/认证/权限/节流)

    1.请求的封装 class HttpRequest(object): def __init__(self): pass @propery def GET(self): pass @propery de ...

  7. 搭建私有 Nuget 服务器教程(1)

    对于 .NET 开发者来说,nuget 是必不可少的程序包管理工具.相应地,大部分开发团队都需要在内部搭建 Nuget 服务器,以管理私有 nupkg 包.本教程所使用的 Nuget 服务器,不是微软 ...

  8. 网页中三角型的CSS实现

    我们在使用CSS框架的时候,经常会用到下拉框组件,一般该组件里面有个下三角.很多网上用到三角形,如图所示,这个三角形是如何实现的呢? 1.使用CSS可以实现,先来复习一CSS盒子模型相关知识.给出如下 ...

  9. Leetcode 1160: 拼写单词

    给你一份『词汇表』(字符串数组) words 和一张『字母表』(字符串) chars. 假如你可以用 chars 中的『字母』(字符)拼写出 words 中的某个『单词』(字符串),那么我们就认为你掌 ...

  10. yarn报错error An unexpected error occurred:****ETIMEDOUT

    起因 在一个美好的下午,我敲击键盘输入quasar create Tangerine_Reception 我自豪的使用yarn作为包管理器,本以为万事无忧,不用担心出现npm的种种异常了...... ...