假设我有两个数组,项目和removeItems,我希望从项目中删除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)?有没有更有效的方法?

最佳答案

实际上是O(M * N)

可能最好先对animals数组进行排序,然后再进行二进制搜索。您将可以减少到O(N * log N)-好吧,无论如何log N < M

无论如何,如果您使用的是JS并且在客户端运行,则只需尽量减少数据量,否则它们的浏览器会在每次请求时对您大喊大叫。

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

10-12 00:11
查看更多