javascript - 根据另一个数组的内容过滤数组的最有效方法是什么?

标签 javascript arrays filtering

假设我有两个数组,items 和 removeItems,我希望从 items 中删除在 removeItems 中找到的任何值。

蛮力机制可能是:

var animals = ["cow","dog","frog","cat","whale","salmon","zebra","tuna"];
var nonMammals = ["salmon","frog","tuna","spider"];
var mammals = [];
var isMammal;

for(var i=0;i<animals.length;i++){
   isMammal = true;
   for(var j=0;j<nonMammals;j++){
     if(nonMammals[j] === animals[i]){
       isMammal = false;
       break;
     }
   }
   if(isMammal){
     mammals.push(animals[i]);
   }
}

这是什么? O(N ^ 2)?有没有更有效的方法?

最佳答案

基本上你想要做的是有效地计算集合差异 S\T。我知道的(渐近)最快的方法是将 T 放入 HashMap 中(这使得 |T| 步骤)并遍历 S 中的每个 s(这使得 |S| 步骤)检查 T 中是否存在 s(这是 O(1))。所以你得到了 O(|T| + |S|) 步。

关于javascript - 根据另一个数组的内容过滤数组的最有效方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/800121/

相关文章:

C : reverse array using pointers?

ios - 对多个实体进行核心数据过滤

javascript - 对象数组的过滤函数

javascript/youtube api 检查播放限制的状态

c# - WP7 InvokeScript 错误

javascript - jQuery 自动完成填充数组

javascript - 通过 Google App Script 调用 AWS Lambda 函数

arrays - AngularJS将数组添加到cookie存储

python - 如何从子集列表中过滤出唯一的组合

jQuery(JS?)如何根据数组中的值过滤元素