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

Suggest elements of an object array which is not there in another object array

本文关键字:不存在 元素 数组 一个对象      更新时间:2023-09-26

我有两个对象数组。

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"}]

此处

array1的类名为A、B、C和D。

array2的类名为X、Y、A、C和Z

函数应该以classNames不属于array1 的方式返回array2classNames

函数的返回将是一个数组,其中包含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;
                }
            }   
        }
    }

}

这里sug[]将提供所有建议。

以下是算法的基本思想:

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

很简单,O(n+m)(最坏的情况是O(2n))。通过真值映射,我的意图是一个普通的js对象,其中每个键(在本例中)是className,每个值是true