首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • 合并数组,删除重复的元素(内附一种高效算法) [已结贴,结贴人:woodfans]
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2007-10-12 20:31:45 楼主
    譬如说:
    array1={a,b,c,d},array2={a,f,g,h},合并后结果是这样{b,c,d,f,g,h},注意不是{a,b,c,d,f,g,h},重复的元素也去掉
    有什么比较好的算法吗,如果结果是{a,b,c,d,f,g,h}的话,下面的算法是目前我见过最快的

    <SCRIPT   LANGUAGE="JavaScript">   
       <!--   
      Array.prototype.unique   =   function()   
      {   
          var   a   =   {};   for(var   i=0;   i <this.length;   i++)   
          {   
              if(typeof   a[this[i]]   ==   "undefined")   
                  a[this[i]]   =   1;   
          }   
          this.length   =   0;   
          for(var   i   in   a)   
              this[this.length]   =   i;   
          return   this;   
      }   
        
      var   a   =   new   Array(1,2,3,4);   
      var   b   =   new   Array(2,3,5,7);   
      var   c   =   a.concat(b).unique();   
      alert(c);   
        
      //-->   
       </SCRIPT>
    20  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2007-10-12 21:14:311楼 得分:20
    这个问题已经讨论过了,你的答案也就是上次讨论的结果。
    Array.prototype.unique = function()
    {
      for(var a={}, i=this.length-1; i>-1; i--)
      {
        if(typeof(a[this[i]])=="undefined") a[this[i]] = 1;
      }
      this.length=0;
      for(i in a) this[this.length] = i; return this;
    };
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2007-10-13 13:06:152楼 得分:0
    meizz:我需要的结果是{b,c,d,f,g,h},注意不是{a,b,c,d,f,g,h}。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2007-10-13 22:47:163楼 得分:0
    各位老大 var a={} 这是什么意思啊?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2007-10-18 23:19:064楼 得分:0
    楼上的,那是定义数组。

    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2007-10-19 11:45:235楼 得分:0
    HTML code
    <script language="javascript"> Array.prototype.unique2 = function() { for(var a={}, b={}, i=0, n=this.length; i<n; i++) { if(typeof(b[this[i]])!="undefined") continue; if(typeof(a[this[i]])=="undefined") a[this[i]] = 1; else{b[this[i]]=1; delete a[this[i]]} } this.length=0; for(i in a) this[this.length] = i; return this; }; var a = new Array(1,2,3,4); var b = new Array(2,3,5,7); var c = a.concat(b).unique2(); alert(c); </script>
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2007-10-19 23:53:096楼 得分:0
    我仔细看了下感觉这样就行
    HTML code
    ]<script language="javascript"> Array.prototype.unique2 = function() { for(var a={}, i=0, n=this.length; i<n; i++) { if(typeof(a[this[i]])=="undefined") a[this[i]] = 1; else{ delete a[this[i]]} } this.length=0; for(i in a) this[this.length] = i; return this; }; var a = new Array(1,2,3,4); var b = new Array(2,3,5,7); var c = a.concat(b).unique2(); alert(c); </script>


    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2007-10-19 23:56:307楼 得分:0
    代码多了个],meizi前辈给看下,最近项目里用到了你写的那棵树,在此表示谢意
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • btbtd
    • 等级:
    发表于:2007-10-20 22:59:578楼 得分:0
    差集。。。应用在标签里的吧。。。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • jiaxueq
    • 等级:
    发表于:2007-10-21 09:42:079楼 得分:0
    写入对象属性,

    再遍历。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • jiaxueq
    • 等级:
    发表于:2007-10-21 09:42:3210楼 得分:0
    写入对象属性(重复的自己会覆盖) 

    再遍历。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-03-24 19:14:1811楼 得分:0
    meizz 正解

    HTML code
    <script language="javascript"> Array.prototype.unique2 = function() { for(var a={}, b={}, i=0, n=this.length; i<n; i++) { if(typeof(b[this[i]])!="undefined") continue; if(typeof(a[this[i]])=="undefined") a[this[i]] = 1; else{b[this[i]]=1; delete a[this[i]]} } this.length=0; for(i in a) this[this.length] = i; return this; }; var a = new Array(1,2,3,4); var b = new Array(2,3,5,7); var c = a.concat(b).unique2(); alert(c); </script>



    woodfans的代码就不行了,如果重复次数是3次,5次……就过滤不了了,比如
    var a = new Array(1,2,3,3);
    var b = new Array(2,2,3,4);
    修改 删除 举报 引用 回复

    网站简介广告服务网站地图帮助联系方式诚聘英才English 问题报告
    世纪乐知(北京)网络技术有限公司 版权所有 京 ICP 证 020026 号
    Copyright © 2000-2007, CSDN.NET, All Rights Reserved