var arr1=["aaa","b","cc"];  
var arr2=["a","aaab","c","d"]; 
var arr3=["a","ab","asc","d","e"];  
var aa = arr1.concat(arr2,arr3).sort().join(";");
bb = aa.replace(/([^\;]*)(\;\1)+(?:$|\;)/g,"");           //去掉所有重复的,如果在数组多次出现,则去掉
cc = aa.replace(/([^\;]*)(\;\1)+(?:$|\;)/g,"$1;");        //去掉重复,如果多次出现,则去掉多余的,留唯一的一个。
console.log(bb);
console.log(cc);自己试试吧

解决方案 »

  1.   

    我想  alert 一下   console.log(bb)  为什么什么都没有出现
      

  2.   

    这个是在调试工具里面看的,没有返回值的。你要是alert的话,就直接alert(bb)就行了
      

  3.   


    var a = [ "a" , "b" , "c" ],
    b = [ "b" , "c" , "d" ],
    c = [ "c" , "d" , "e" ],
    _a = a.concat( b ).concat( c ),
    _hash = {},
    _new = [];
    for( var i = _a.length; i--; ){
    if( !_hash[ _a[ i ] ] ){
    _hash[ _a[ i ] ] = 1;
    _new.push( _a[ i ] );
    };
    };
    return _new;
      

  4.   

    具体情况是这样  我能获取到的是 3 个字符串   可以用 split 转换成数组
    我的想法是先把字符串拼到一起然后再转化成数组   通过把新的数组去重实现 
    现在是问题是  alert 弹出的值是我想要的  我不知道怎么样把弹出的值整合到一起 
    <script>
    function nosame()
    {
    var total=document.getElementById("total").value;
    var userArr=total.split(",");
    for(var i=0;i<userArr.length;i++)
    {
     for(var j=0;j<userArr.length;j++)
     {
        if(userArr[i]==userArr[j]&&i!=j)
    {
      userArr.splice(i,1);
    }  
     }
     alert(userArr[i]);
    }
    }
    </script>
      

  5.   

    var arr1=["aaa","b","cc"];  
    var arr2=["a","aaab","c","d"]; 
    var arr3=["a","ab","asc","d","e"];  
    var aa = arr1.concat(arr2,arr3).sort().join(";");
    bb = aa.replace(/([^\;]*)(\;\1)+(?:$|\;)/g,"");           //去掉所有重复的,如果在数组多次出现,则去掉
    cc = aa.replace(/([^\;]*)(\;\1)+(?:$|\;)/g,"$1;");        //去掉重复,如果多次出现,则去掉多余的,留唯一的一个。
    alert(bb);
    alert(cc);
    //上面的还都是字符串,如果要转成数组,用split就行了。
    bb = bb.split(";");
    cc = cc.split(";");
    alert(bb); // 这里是数组
    alert(cc); // 这里是数组直接这样测试,不出东西吗?如果是你获取的数组使用这样的方法,有错误的话,就先看看获得的数组是怎么样的。你如果是获取的字符串,就要改一下代码,写成这样的。
    var arr1='aaa,b,cc';  
    var arr2='a,aaab,c,d'; 
    var arr3='a,ab,asc,d,e';  
    var aa = arr1.split(",").concat(arr2.split(","),arr3.split(",")).sort().join(";");
    bb = aa.replace(/([^\;]*)(\;\1)+(?:$|\;)/g,"");           //去掉所有重复的,如果在数组多次出现,则去掉
    cc = aa.replace(/([^\;]*)(\;\1)+(?:$|\;)/g,"$1;");        //去掉重复,如果多次出现,则去掉多余的,留唯一的一个。
    alert(bb);
    alert(cc);
    //上面的还都是字符串,如果要转成数组,用split就行了。
    bb = bb.split(";");
    cc = cc.split(";");
    alert(bb); // 这里是数组
    alert(cc); // 这里是数组
      

  6.   

    可以理解你的思路简单,可是写代码,要找执行效率最好的啊,不能说为了写法更简单,而不考虑效率的问题的通常js自带的API,有最高的效率,所以如果可以用js原生的方法实现的话,就不要自己去写循环遍历。。之前有写过一个这方面的东西,你看看,其实你这种for循环写的,是效率最低的http://blog.csdn.net/zyl_lyr1019/article/details/16332215之前写的一篇,也是单个数组去重的,看看呗。
      

  7.   

    bb = aa.replace(/(^|\;)([^\;]*)(\;\2)+(?:$|\;)/g,"$1");           //去掉所有重复的,如果在数组多次出现,则去掉
    cc = aa.replace(/(^|\;)([^\;]*)(\;\2)+(?:$|\;)/g,"$1$2;");是的,之前没有太仔细看,这样就可以了。
      

  8.   

    还是有问题呢  为什么我的字符串改成这样就不对了呢var arr1='admin,wangh,zhangjj';  
    var arr2='admin,wangh,zhangjj'; 
    var arr3='admin,wangh,zhangjj'; 
      

  9.   

    var aa = arr1.split(",").concat(arr2.split(","),arr3.split(",")).sort().join(";;");
    bb = aa.replace(/((?:^|\;)([^\;]*)(?:$|\;))((?:^|\;)(\2)(?:$|\;))+/g,"");
    cc = aa.replace(/((?:^|\;)([^\;]*)(?:$|\;))((?:^|\;)(\2)(?:$|\;))+/g,"$1").replace(/^\;+|\;+$/,"");构造一种特殊的结构吧,暂时只能想到这个了!!!
      

  10.   

    function unique(array){
        /// <summary>
        /// 排除数据中的重复项
        /// </summary>
        /// <param name="arr">目标数组</param>
        /// <returns>操作后的新数组</returns>
        var keep={},
            res=[];
        for(i=0;i<array.length;i++){    
            if(!keep[array[i]]){
                keep[array[i]]=!0;
                res.push(array[i]);
            };
        };
        return res;
    };
    var str1='a,b,c',
        str2='a,b,c,d,e',
        str3='a,b,c,d,e'
        arr=(str1+','+str2+','+str3).split(',')
        res=unique(arr);
    //如果你需要的是数组类型,res就是你要的,如果你需要的字符串类型,res.join(',')就是你要的    
    alert(res.join(','))
      

  11.   

    arr=(str1+','+str2+','+str3).split(','),后面少打了个逗号
      

  12.   

    谢谢大家的帮助  问题已经解决了 
    解决思路是这样:先把前2个数组去重合并。合并后的字符串跟第三个数组去重合并。因为有时候第二、三个数组会为空加了些判断。<script>
    function nosame()
    {
        var sjname=document.getElementById("auditor1").value;
        var csname=document.getElementById("auditor2").value; 
    var msname=document.getElementById("auditor").value; 
    var sjArr=sjname.split(",");
    var csArr=csname.split(",");
    var msArr=msname.split(",");
    if(csname==""&&msname=="")
    {
     document.getElementById("total").value=sjname;
    }
    if(csname!="")
    {
       var obj = new Object();
      for(var i =0;i<sjArr.length;i++){
        obj[sjArr[i]] = sjArr[i];
      }
      for(var i =0;i<csArr.length;i++){
        obj[csArr[i]] = csArr[i];
     }
      var arr = new Array();
      var i = 0; 
      for(var per in obj){
        arr[i++] = obj[per];
      }
      document.getElementById("total").value=arr;
      }
      if(csname!="")
      {
       var obj = new Object();
      for(var i =0;i<sjArr.length;i++){
        obj[sjArr[i]] = sjArr[i];
      }
      for(var i =0;i<csArr.length;i++){
        obj[csArr[i]] = csArr[i];
     }
      var arr = new Array();
      var i = 0; 
      for(var per in obj){
        arr[i++] = obj[per];
      }
      document.getElementById("total").value=arr; 
      }
      if(msname!="")
    {
    var total=document.getElementById("total").value;
    var toArr=total.split(",");
       var obj = new Object();
      for(var i =0;i<toArr.length;i++){
        obj[toArr[i]] = toArr[i];
      }
      for(var i =0;i<msArr.length;i++){
        obj[msArr[i]] = msArr[i];
     }
      var arr = new Array();
      var i = 0; 
      for(var per in obj){
        arr[i++] = obj[per];
      }
      document.getElementById("total").value=arr;
      }}
    </script>