<script language = 'javascript'>var a=[];
var b =[];for(var i=0;i<10000;i++){
a.push(i+1);
b.push(i+2);
}var aDiff = [];
var aSame = [];// sort 是按 ascii 排序,而不是数字大小,
// 所以下面一样的排 ascii ...
a.sort();
b.sort();var ak = 0;
var bk = 0;while(1){ if( ak>=a.length && bk>=b.length){ // a,b 都越界,对比结束
break;
}else if( ak>=a.length || bk>=b.length){ // a | b 越界, aDiff 为未越界的项
if(ak<a.length){
aDiff.push(a[ak]);
ak++;
}else{
aDiff.push(b[bk]);
bk++;
}
}else{ //a, b 都没越界,对比两个 ascii 的大小:
var na = [a[ak],b[bk]];
na.sort(); if(a[ak]==b[bk]){
aSame.push(a[ak]);
ak++;
bk++;
}
else if(a[ak]==na[0]){
aDiff.push(a[ak]);
ak++;
}else{
aDiff.push(b[bk]);
bk++;
}
}}alert("Same: "+aSame);
alert("Diff: "+aDiff);
</script>

解决方案 »

  1.   

    总是要遍历的.
    不过可以用一些其它的方法.
    比如说hash什么的.<script type="text/javascript">
    var i;
    var a = [], b = [];
    for (i = 0 ; i < 10000 ; i ++)
    a[i] = Math.ceil(1000 * 9000 * Math.random());
    for (i = 0 ; i < 10000 ; i ++)
    b[i] = Math.ceil(1000 * 9000 * Math.random());var a = [1000,2000,1,2,3];
    var b = [1000,2000,4];var ca = a.slice(0);
    var cb = b.slice(0)
    var Hash = {}
    var aDiff = [];
    var aSame = [];var v = {};var d = new Date;while (a.length > 0) {
    t = a.pop();
    if (!Hash[t]) Hash[t] = 1;
    }while (b.length > 0) {
    t = b.pop()
    if (!v[t]) {
    v[t] = 1;
    if (Hash[t]) {
    aSame[aSame.length] = t;
    delete Hash[t];
    } else {
    aDiff[aDiff.length] = t;
    }
    }
    }for (t in Hash) {
    aDiff[aDiff.length] = t;
    delete Hash[t];
    }alert(new Date() - d);document.write(
    "a数组:", ca, "<br />b数组:", cb, "<br /><br />"
    , "相同:", aSame, "<br />不同:", aDiff
    );
    </script>
      

  2.   

    for (i = 0 ; i < 10000 ; i ++) {
    a[i] = Math.ceil(1000 * 9000 * Math.random());
    b[i] = Math.ceil(1000 * 9000 * Math.random());
    }
    //var a = [1000,2000,1,2,3];
    //var b = [1000,2000,4];
    简化下..:D