数组去重建议直接使用jquery的 $.unique(arr);方法,此外比较好的方法是本文中的unique3方法比较快用了一个hash表,就是所谓的空间换时间。本文还提供了很多其他写法,都是大同小异.

  1. // $.unique(arr)推荐
           var arr = [1, 'a', 2, 'b', 'b', 3, 'c', 'c', 'c'];
  2. document.write("jq-unique(): " + $.unique(arr) + "</br>"); // 1,a,2,b,3,c
  3.  
  4.    // 使用$.inArray(arr[i], new_arr),判断是否在新数组中
  5. var jqUnique3 = function(arr) {
  6. var new_arr = []; // 定义一个空数组,用来存放最后筛选出来的元素
  7. for(var i = 0; i < arr.length; i++) {  
  8. if($.inArray(arr[i], new_arr) == -1) { // jQuery.inArray()函数用于在数组中搜索指定的值,并返回其索引值。如果数组中不存在该值,则返回 -1。
  9. new_arr.push(arr[i]); // 不存在则插入到new_arr的最后     
  10. }
  11. }
  12. return new_arr;
  13. }
  14. var arr = [1, 'a', 2, 'b', 'b', 3, 'c', 'c', 'c'];
  15. document.write("jq-unique3(): " + jqUnique3(arr) + "</br>"); // 1,a,2,b,3,c
  16.  
  17. // 设置标志位
  18. Array.prototype.unique1 = function() {
  19. var new_arr = [this[0]]; // 构建一个新的数组存放结果
  20. for(var i = 1; i < this.length; i++) {
  21. var repeat = false;
  22. for(var j = 0; j < new_arr.length; j++) {
  23. if(this[i] == new_arr[j]) { // for循环中每次从原数组中取出一个元素,用这个元素循环与结果数组对比
  24. repeat = true;
  25. break;
  26. }
  27. }
  28. if(!repeat) {
  29. new_arr.push(this[i]); // 若结果数组中没有该元素,则存到结果数组中
  30. }
  31. }
  32. return new_arr;
  33. }
  34. var arr = [1, 'a', 2, 'b', 'b', 3, 'c', 'c', 'c'];
  35. document.write("js-unique1(): " + arr.unique1() + "</br>"); // 1,a,2,b,3,c
  36.  
  37. // 先排序再判断
  38. // 有一定的局限性,因为在去重前进行了排序,所以最后返回的去重结果也是排序后的。如果要求不改变数组的顺序去重,那这种方法便不可取了。
  39. Array.prototype.unique2 = function() {
  40. this.sort(); // 先将原数组进行排序
  41. var new_arr = [this[0]];
  42. for(var i = 1; i < this.length; i++) {
  43. if(this[i] !== new_arr[new_arr.length - 1]) { // 检查原数组中的第i个元素 与 结果数组中的最后一个元素是否相同,因为已经排序,所以重复元素会在相邻位置
  44. new_arr.push(this[i]); // 如果不相同,则将该元素存入结果数组中
  45. }
  46. }
  47. return new_arr;
  48. }
  49. var arr = [1, 'a', 2, 'b', 'b', 3, 'c', 'c', 'c'];
  50. document.write("js-unique2(): " + arr.unique2() + "</br>"); // 1,2,3,a,b,c
  51.  
  52. // 使用Hash表,推荐
  53. Array.prototype.unique3 = function() {
  54. var new_arr = []; // 创建一个新的数组存放结果
  55. var json = {}; // 创建一个空对象
  56. for(var i = 0; i < this.length; i++) { // for循环时,每次取出一个元素与对象进行对比,如果这个元素不重复,则把它存放到结果数组中,同时把这个元素的内容作为对象的一个属性,并赋值为1,存入到第2步建立的对象中。
  57. if(!json[this[i]]) {
  58. new_arr.push(this[i]);
  59. json[this[i]] = true;
  60. }
  61. }
  62. return new_arr;
  63. }
  64. var arr = [1, 'a', 2, 'b', 'b', 3, 'c', 'c', 'c'];
  65. document.write("js-unique3(): " + arr.unique3() + "</br>"); // 1,a,2,b,3,c
  66.  
  67. // indexOf 判断新数组中是否已存在
  68. Array.prototype.unique4 = function() {
  69. var new_arr = []; //一个新的临时数组
  70. for(var i = 0; i < this.length; i++) //遍历当前数组
  71. {
  72. //如果当前数组的第i已经保存进了临时数组,那么跳过,
  73. //否则把当前项push到临时数组里面
  74. if(new_arr.indexOf(this[i]) == -1) new_arr.push(this[i]);
  75. }
  76. return new_arr;
  77. }
  78. var arr = [1, 'a', 2, 'b', 'b', 3, 'c', 'c', 'c'];
  79. document.write("js-unique4(): " + arr.unique4() + "</br>"); // 1,a,2,b,3,c
  80.  
  81. // indexOf 判断当前数组的第i项在当前数组中第一次出现的位置是不是i
  82. Array.prototype.unique5 = function() {
  83. var new_arr = [this[0]]; //结果数组
  84. for(var i = 1; i < this.length; i++) //从第二项开始遍历
  85. {
  86. //如果当前数组的第i项在当前数组中第一次出现的位置不是i,
  87. //那么表示第i项是重复的,忽略掉。否则存入结果数组
  88. if(this.indexOf(this[i]) == i) new_arr.push(this[i]);
  89. }
  90. return new_arr;
  91. }
  92. var arr = [1, 'a', 2, 'b', 'b', 3, 'c', 'c', 'c'];
  93. document.write("js-unique5(): " + arr.unique5() + "</br>"); // 1,a,2,b,3,c

js jquery数组去重的更多相关文章

  1. js中数组去重的几种方法

    js中数组去重的几种方法         1.遍历数组,一一比较,比较到相同的就删除后面的                 function unique(arr){                 ...

  2. JS实现数组去重方法大总结

    js数组根据对象中的元素去重: var arr2 = [ { name: "name1", num: "1" }, { name: "name2&qu ...

  3. Js对于数组去重提高效率一些心得

    最近在找工作,好几次面试都问过数组去重的问题.虽然问的都不一样,但是核心思想是没有变的. 第一种是比较常规的方法 思路: 构建一个新的数组存放结果 for循环中每次从原数组中取出一个元素,用这个元素循 ...

  4. js,jQuery数组常用操作小结

    一.js中数组常用操作小结 (1) shift:删除原数组第一项,并返回删除元素的值:如果数组为空则返回undefined var a = [1,2,3,4,5]; var b = a.shift() ...

  5. js引用类型数组去重-对象标记法

    前言 Js数组去重已经有很多种实现方式:包括逐个检索对比(使用Array.property.indexOf),先排序后对比,使用hash表,利用ES6中的Set()等.这些数组去重办法中速度最快的是h ...

  6. JS实现数组去重方法整理

    前言 我们先来看下面的例子,当然来源与网络,地址<删除数组中多个不连续的数组元素的正确姿势> 我们现在将数组中所有的‘ a’ 元素删除: var arr = ['a', 'a', 'b', ...

  7. js06--利用js给数组去重

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/stri ...

  8. js中数组去重方法及性能对比

    js中数组的 数组去重 常用的数组去重方法以及效率分析: 首先我们先构建一个数组,主要是用于进行去重实验,我们主要实验的量级为1000,10000,100000,500000.具体的生成数组的方法如下 ...

  9. js对数组去重的方法总结-(2019-1)

    最近待业在家,系统地学习了一套js的课程.虽然工作时间真的比较长了,但有些东西只局限在知其然而不知其所以然的程度上,有些知识点通过“血和泪”的经验积累下来,也只是记了结果并没有深究,所以每次听完课都有 ...

随机推荐

  1. Linux启动/停止/重启Mysql数据库

    1.查看mysql版本 1)status; 2)select version(); 2.Mysql启动 1)使用 service 启动: service mysqld start (5.0版本是mys ...

  2. MyBatis映射文件4(参数获取#{}和${}/select标签详解[返回类型为list])

    参数获取 之前我们都是采用#{}的方式进行参数传递,其实MyBatis还有另外的参数传递方式${} 使用方法相同,但是还是有很大区别的 这里做一个测试: <select id="get ...

  3. 认识SQL

    一.SQL介绍 SQL 是用于访问和处理数据库的标准的计算机语言. i.What? SQL 指结构化查询语言 SQL 使我们有能力访问数据库 SQL 是一种 ANSI 的标准计算机语言 ii.How? ...

  4. python[练习题]:实现Base64编码

    要求自己实现算法,不用库. Base64简介: Base64是一种用64个字符来表示任意二进制数据的方法. 用记事本打开exe.jpg.pdf这些文件时,我们都会看到一大堆乱码,因为二进制文件包含很多 ...

  5. 利用 Docker 搭建单机的 Cloudera CDH 以及使用实践

    想用 CDH 大礼包,于是先在 Mac 上和 Centos7.4 上分别搞个了单机的测试用.其实操作的流和使用到的命令差不多就一并说了: 首先前往官方下载包: https://www.cloudera ...

  6. C# 中那些常用的工具类(Utility Class)(二)

    今天按照这一年来经常用到的那些静态的工具类再来做一次总结,这些小的工具来可以作为自己学习的很好的例子,通过总结这些东西,能够很大程度上梳理自己的知识体系,当然这个是经常用到的,接下来就一个个去分析这些 ...

  7. ERP行业内幕看了这五个问题全懂了

    ERP系统是现代企业实现信息化管理的必经之路.但很多管理人员或已经在用ERP的人员,其实并不太懂ERP系统是什么意思,有哪些好处等,导致实际使用过程中经常大材小用,或者“英雄无用武之地”.所以,为了更 ...

  8. flask Django保存session区别

    '''Django中,session保存在服务端的数据库中,数据库中保存请求用户的所有数据,服务端数据中{'随机字符串':加密后的客户相关信息}请求完成后,把随机字符串作为值,返回给客户端,保存在客户 ...

  9. jdbc工具类2..0

    一.创建外部文件 url=jdbc:mysql:///qy66 use=root password=root driver=com.mysql.jdbc.Driver 二.创建工具类 package ...

  10. java 环境变量配置 详解!

    <!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...