~~~~~~~~~~~数组转换的小算法~~~~~~~~~~~~~~

问题:
var a = ["11","211","33","4","55"];
var b = ["11","33","4"];
如何获得 ["211","55"]

要求
1 复杂度小于O(n^2)
2 用原生js写(Java也可以,没有用到高级API就行 )
ps:字符串之间没有规律~~

两边排序,快速排序平均复杂度LogN,然后交错比较,复杂度N

a.reduce(function(a,b){
return a>b?a:b;
})
b.reduce(function(a,b){
return a>b?b:a;
})

function a(){
var a = ["11","211","33","4","55"];
var b = ["11","33","4"];
var c = new Array();

            for(i=0;i<a.length;i++){
                var ai = a[i];
                var ck = true;
                for(j=0;j<b.length;j++){
                    if(ai==b[j]){
                        ck=false;
                    }
                }
                if(ck){
                    c.push(ai);
                }
            }

            console.log(c);
        }

        ![图片说明](https://img-ask.csdn.net/upload/201708/12/1502472455_399249.png)

按照我的思路。我会先使用concat的方法,将其整合为一个数组,其次,我会使用reduce方法,大概遍历length-1次,然后加到一个新数组里面,
同时我会判断那个数组的内部会不会有这个数字,如果有,我会放在一个新数组,到最后遍历结束的时候,我活得到了三个新数组,一个是长度为8的总长数组,一个是长度为3的重复数组,一个是为5的不重复(单一)数组,接着再reduce一次这个长度为5的单一数组,大概是5次操作,然后返回一个最新的定义的数组,最后我操作了13遍

先遍历数组b,生成一个字典,再遍历数组a

var a = ["11","211","33","4","55"];
var b = ["11","33","4"];

var d = {};
b.forEach(function(item){
    d[item] = true;
});

var result = a.filter(function(item){
    return !d[item];
});