假设我有两个数组,项目和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/