c#以前写过一个,转了一下,应该没问题
<script>
var a = [1,2,3,4,5,6]; 
var b = [4,5,6,7,8,9];
//如果不是按升序,先排序
a.sort(function(m,n){return m-n;})
b.sort(function(m,n){return m-n;})var c = getDiffElments(a,b);
alert(c);//1,2,3,7,8,9
function Array.prototype.addRange(b)
{
    for(var i=0;i<b.length;i++)
    {
        this.push(b[i]);
    }
    return this;
}
function getDiffElments(a, b)   
{   
    var c = [];
    var p = a.length;
    var q = b.length;
    if (b[0]>a[p - 1] || b[q - 1]<a[0])//2个数组没有相同元素,全部输出a,b   
    {   
        c = a.addRange(b);   
    }   
    else  
    {   
        var m = 0;   
        var t = 0;   
        var k = 0;   
        var flag;   
        while (m<q)   
        {   
            flag = false;   
            for (var i = t; i < p; i++)   
            {   
                if (b[m]==a[i])   
                {   
                    t = i+1;   
                    flag = true;   
                    break;   
                }   
            }   
        
            if (!flag){
              c.push(b[m]);  
            } 
            else  
            {   
                if (t - k >2)   
                {   
                    var st = k + 1;   
                    if (k == 0) st = 0;   
                    for (var i = st; i < t - 1; i++)   
                    {   
                        c.push(a[i]);   
                    }   
                }   
                k = t - 1;   
            }               if (m == q - 1)   
            {   
                for (var i = k + 1; i < p; i++)   
                {   
                    c.push(a[i]);   
                }   
            }   
            m++;   
        }   
 
    }   
       
    return c; 
}   
  </script>

解决方案 »

  1.   

    上面代码效率要高,不需要判断a里有没有b的任意元素,然后再判断b里有没有a任意元素
      

  2.   

    如果你要用你的
    要用2个for...for二重循环);
      

  3.   

    function xm() {
            var a = [1, 2, 3, 4, 5, 6];
            var b = [4, 5, 6, 7, 8, 9];
            var c = "";
            for (var i = 0; i < a.length; i++) {
                var d = false;
                for (var j = 0; j < b.length; j++) {
                    if (a[i] == b[j]) {
                        d = true; break;
                    }
                }            if (d) c += a[i] + "," + b[j] + ",";
            }
            
            document.write(c);        var all = a.concat(b);
            all.sort();
            var s = all.join(',');
            var reg=new RegExp(c,"g");
            s = s.replace(reg, '');
            alert(s);
        }
      

  4.   


    function xm()
        { 
            var a = [1,2,3,4,5,6]; 
            var b = [4,5,6,7,8,9]; 
            var c = "";
            var strA = "";
            var strB = "";
            
            for(i=0;i<a.length;i++)
            {
                strA+=a[i]+",";
            }
            
            for(i=0;i<b.length;i++)
            {
                strB+=b[i]+",";
            }
            
            for(var i=0;i<a.length;i++)
            { 
                var d = false; 
                for(var j=0;j <b.length;j++)
                { 
                    if(a[i]==b[j])
                    { 
                        d = true; break;
                    }
                } 
                if(d)
                {
                   strA = strA.replace(a[i]+",","");
                   strB = strB.replace(a[i]+",","");
                }
            }
            
            c=strA + strB;
            
            document.write(c);
            
        } 
        xm();
      

  5.   


    我的算法思路是这样的:
    1.判断b[0]>b[5]或者b[5]<a[0],直接输入a,b合集
    2.m=0,b[0]开始,在a[]中遍历,
    如果找到大于等于b[0]的,flag=true,标识a[]中下次查找位置t=i+1,break;
    3.如果flag=false,说明a[]中没有b[0],b[0]入栈c.push(b[0])
    否则说明有说明有a[]中有b[0],因为是a是从小到大排序好的,
    t位置之前的元素,b[]中肯定没有,所以都可以被c push入栈
    4.如果m是b最后一个元素,这是如果t小于a.length,那a[]中>=m位置所有元素只要不等于b[m]都入栈,结束
    5.m++,m<=a.length进入步骤1
    上面算法改了一下
    <script>
    var a = [1,2,3,9,9,11]; 
    var b = [4,5,6,7,8,9];
    //如果不是按升序,先排序
    a.sort(function(m,n){return m-n;})
    b.sort(function(m,n){return m-n;})var c = getDiffElments(a,b);
    alert(c);//1,2,3,7,8,9
    function Array.prototype.addRange(b)
    {
        for(var i=0;i<b.length;i++)
        {
            this.push(b[i]);
        }
        return this;
    }
    function getDiffElments(a, b)   
    {   
        var c = [];
        var p = a.length;
        var q = b.length;
        if (b[0]>a[p - 1] || b[q - 1]<a[0])//2个数组没有相同元素,全部输出a,b   
        {   
            c = a.addRange(b);   
        }   
        else  
        {   
            var m = 0;   
            var t = 0;   
            var k = 0;   
            var flag;   
            while (m<q)   
            {   
                flag = false;   
                for (var i = t; i < p; i++)   
                {   
                    if (b[m]<=a[i])   
                    {   
                        t = i+1;   
                        flag = true;   
                        break;   
                    }   
                }   
            
                if (!flag){
                  c.push(b[m]);  
                } 
                else  
                {   
                    if (t - k >2)   
                    {   
                        var st = k + 1;   
                        if (k == 0) st = 0;   
                        for (var i = st; i < t - 1; i++)   
                        {   
                            c.push(a[i]);   
                        }   
                    }   
                    k = t - 1;   
                }               if (m == q - 1)   
                {   
                    for (var i = t-1; i < p; i++)   
                    {   
                        if(a[i]!=b[m])c.push(a[i]);   
                    }   
                }   
                m++;   
            }   
           
               
        }   
               return c; 
    }   
      
    </script>
      

  6.   

    修改一下5.m++,m <=a.length进入步骤2,不知你LZ看懂没有,如果是排序好,肯定快
      

  7.   

    我用我的机器测试了一下,a,b为800个随机数,用正则替换方法直接当掉,我上面的方法30-80ms