建议在另一个对象数组中不存在的对象数组的元素

Jav*_*eef -2 javascript arrays performance jquery json

我有两个对象数组.

Array1 : [{"id":20,"stName":"ABC","className":"A"},{"id":30,"stName":"ABD","className":"B"},{"id":40,"stName":"ABE","className":"C"},{"id":50,"stName":"ABF","className":"D"}]
Array2 : [{"id":110,"stName":"ASA","className":"X"},{"id":120,"stName":"ASB","className":"Y"},{"id":130,"stName":"ASC","className":"A"},{"id":140,"stName":"ASD","className":"C"},{"id":150,"stName":"ASE","className":"Z"}]
Run Code Online (Sandbox Code Playgroud)

这里

array1的classNames为A,B,C和D.

array2的classNames为X,Y,A,C和Z.

函数应该返回classNamesarray2是,这种方式classNames不属于array1

函数的返回将是一个包含X,Y和Z作为元素的数组.

如何以javascript较少的时间复杂度编写此函数,因为array1和array2可能有20个以上的对象.

编辑

这是我用过的脚本 for loop

array1 = [{"id":20,"stName":"ABC","className":"A"},{"id":30,"stName":"ABD","className":"B"},{"id":40,"stName":"ABE","className":"C"},{"id":50,"stName":"ABF","className":"D"}]
array2 = [{"id":110,"stName":"ASA","className":"X"},{"id":120,"stName":"ASB","className":"Y"},{"id":130,"stName":"ASC","className":"A"},{"id":140,"stName":"ASD","className":"C"},{"id":150,"stName":"ASE","className":"Z"}]

function findSuggest(){
    var sug = [];
    for(array2_count=0;array2_count < array2.length;array2_count++){
        for(array1_count=0;array1_count < array1.length;array1_count++){
            if(array2[array2_count].className == array1[array1_count].className){
                break;  
            }
            else{
                if(array1_count == (array1.length - 1)){
                    sug[sug.length] = array2[array2_count].className;

                }
            }   
        }
    }


}
Run Code Online (Sandbox Code Playgroud)

这里sug[] 有所有建议.

Cap*_*Six 18

以下是该算法的一般概念:

  • 迭代Array1.
    • 将当前项添加className到真值图中
  • 迭代 Array2
    • 如果当前项目className不在真值映射中,请将其添加到结果中.

那很简单,O(n+m)(最糟糕的情况O(2n)).通过真值图,我的意图是一个普通的js对象,其中每个键(在这种情况下)是a className,每个值都是true.

  • +1用于建议方法与提供代码.这绝对是解决这个问题的方法,至少在ES6套装可用之前. (2认同)