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;
}

解决方案 »

  1.   

    大容量数组的循环方面效率不尽人意,解决的方案就是:先把数组join()成一个大字符串,然后用正则表达式对这个大字符串进行匹配检索。
    <input id="count" value="50000" size="7" maxlength="6">
    <input type="button" value="数组初始华" onclick="txt.innerHTML = array_init()" ID=Button1><br>
    <input type="button" value="传统循环" onclick="txt.innerHTML += method_for()" ID=Button2>
    <input type="button" value="正则匹配" onclick="txt.innerHTML += method_regexp()" ID=Button3>
    <div id="txt"></div><SCRIPT LANGUAGE="JavaScript">
    var txt = document.getElementById("txt");
    var a = new Array();function array_init()
    {
        var n = parseInt(document.getElementById("count").value);
        a.length = 0;
        for(var i=0; i<n; i++)
        {
          a[i] = Math.random() +"";
        }
        return "数组长度:"+ n;
    }function method_for()
    {
        var n = a.length;
        var begin = new Date().getTime();
        var b = new Array();
        for(var i=0; i<n; i++)
        {
          if(a[i].indexOf("0.9999")==0)
          {
            b[b.length] = a[i];
          }
        }
        return ("<br>传统循环法耗时 "+ (new Date().getTime() - begin)
        +" 毫秒!检索的结果:<strong title='"+ b.join("&#13;")
        +"'>检索到 "+ b.length +" 个记录!</strong>");
    }function method_regexp()
    {
        var begin = new Date().getTime();
        var b = new Array();
        var s = a.join("\x0f");
        var r = new RegExp().compile("0\\.9999\\d+", "g");
        b = s.match(r);   s = "";
        return ("<br>正则匹配法耗时 "+ (new Date().getTime() - begin)
        +" 毫秒!检索的结果:<strong title='"+ b.join("&#13;")
        +"'>检索到 "+ b.length +" 个记录!</strong>");
    }
    </SCRIPT>
      

  2.   

    上面的代码是meizz去数组中的重复记录的方法,详细代码我写好了,但是发不上来,我在看哪部分有问题
      

  3.   

    有谁可以解释一下,clare2003(忘情火) 的这个函数吗?虽然在五年前学了 javascript 但没有深入。一直相当于初学者水平。function method_regexp()
    {
        var begin = new Date().getTime();
        var b = new Array();
        var s = a.join("\x0f");
        var r = new RegExp().compile("0\\.9999\\d+", "g");
        b = s.match(r);   s = "";
        return ("<br>正则匹配法耗时 "+ (new Date().getTime() - begin)
        +" 毫秒!检索的结果:<strong title='"+ b.join("&#13;")
        +"'>检索到 "+ b.length +" 个记录!</strong>");
    }
    </SCRIPT>
      

  4.   

    算了,按你的需求写的代码发不上去,我的思路就是先组装成一个数组,用上面的代码去掉重复的元素,判断原数组的长度和新数组的长度是不是相等,如果不等就有重复的,可以参见
    http://blog.csdn.net/hbhbhbhbhb1021/archive/2005/10/28/518390.aspx
      

  5.   

    很简单!
    <script>
    a = [];
    o = document.ucp_depotin['article_coding[]'];
    for(i=0; i<o.length; i++) {
      v = o[i].value;
      if(! a[v]) a[v] = 0;
      a[v]++;
      if(a[v] > 1)
        alert('有重复'+v+':'+a[v]);
    }
    </script>注意,无论把数组连接成串时的效率有多高。但是对象数组是不能简单的join的,遍历总是少不了的
    变换一下思维,就可以把复杂的问题简单化
      

  6.   

    xuzuning(唠叨) 真是高,呵呵,学到了不少。