Javascript 什么';根据另一个数组的内容筛选数组的最有效方法是什么?

Javascript 什么';根据另一个数组的内容筛选数组的最有效方法是什么?,javascript,arrays,filtering,Javascript,Arrays,Filtering,假设我有两个数组,items和removitems,我希望从items中删除removitems中找到的任何值 蛮力机制可能是: 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.l

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

蛮力机制可能是:

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]);
   }
}
var动物=[“牛”、“狗”、“青蛙”、“猫”、“鲸鱼”、“鲑鱼”、“斑马”、“金枪鱼”];
var非货币=[“鲑鱼”、“青蛙”、“金枪鱼”、“蜘蛛”];
var=[];
var isMammal;
对于(var i=0;i这实际上是
O(M*N)

也许你可以先对
动物
数组进行更好的排序,然后再进行二进制搜索。你将能够减少到
O(N*logn)
-好吧,那就是如果
logn

无论如何,如果你使用的是运行客户端的JS,那么就尽量减少数据量,否则他们的浏览器会对你的每一个请求都大喊大叫。

这实际上是
O(M*N)

也许你可以先对
动物
数组进行更好的排序,然后再进行二进制搜索。你将能够减少到
O(N*logn)
-好吧,那就是如果
logn


无论如何,如果您使用的是运行客户端的JS,那么请尽量减少数据量,否则他们的浏览器会对您的每一个请求都大喊大叫。

使用jQuery非常简单:

function is_mammal(animal)
{
    return $.inArray(animal, nonMammals) == -1;
}

mammals = $.grep(animals, is_mammal);

查看文档了解和。

使用jQuery非常简单:

function is_mammal(animal)
{
    return $.inArray(animal, nonMammals) == -1;
}

mammals = $.grep(animals, is_mammal);

请参阅文档中的和。

基本上,您要做的是有效地计算集差S\T。我知道的(渐进)最快的方法是将T放入哈希映射(生成| T |步)中,然后在S中遍历每个S(生成| S |步),检查S在T中是否存在S(即O(1))。这样就得到了O(| T |+| S |)步骤。

基本上,你要做的是有效地计算集差S\T。我知道的(渐进)最快的方法是将T放入一个hashmap(产生| T |步骤)并在S中遍历每个S(产生| S |步骤)检查T中的S(即O(1))。因此你得到O(| T |+| S |)步骤。

我刚才也写了一些关于列表排序的内容。你最后用nlg(n)+mlg(n)对主列表进行排序,然后搜索主列表m次,这实际上是m*lg(n)-比n^2好得多。我刚才也写了一些关于列表排序的内容。你最后用nlg(n)+mlg(n)对主列表进行排序,然后搜索主列表m次,这实际上是m*lg(n)-比n^2好得多。这很容易,但不会使它比O(n^2)更好。仅仅因为“隐藏”循环并不意味着$.inArray()和$.grep()没有循环。这很容易,但不会使它比O(n^2)更好。仅仅因为你“隐藏”循环并不意味着$.inArray()和$.grep()没有循环。虽然这比我的答案快,但哈希表需要更多的内存。到处都有优点和缺点,对吧?:)无论如何,我相信这是最好的解决方案,所以我的+1出现了。是的,这就是为什么我在那里写了渐近表达式。;)我个人认为,对于小的输入,即使是平方解也足够了。虽然这比我的答案快,但哈希表需要更多的内存。到处都有利弊,对吧?:)无论如何,我相信这是最好的解决方案,所以我的+1出现了。是的,这就是为什么我在那里写渐近解我个人认为,对于小的输入,即使是平方解也足够了。