用jQuery比较数组

可能重复:
javascript中数组交集的最简单代码
如何在Javascript中合并两个数组

有三个数组:

var items = Array(523,3452,334,31,5346); var items_used = Array(3452,31,4123); var items_new = Array(); 

第一个是通用的,第二个是当前使用的项目。 第三个包括第一个数组中的所有项目,第二个没有提到。

如何从第一个数组项中删除,在第二个数组中使用,并将结果写入第三个数组?

我们应该得到items_new = Array(523, 334, 5346) 。 删除了345231 ,因为它们在第二个数组中被提及。

你可以这样做:

 var items = Array(523,3452,334,31,5346); var items_used = Array(3452,31,4123); var items_compared = Array(); $.each(items, function(i, val){ if($.inArray(val, items_used) < 0) items_compared.push(val); }); 

而已

为什么不是一个简单的for循环?

 for(var j = 0; j < items.length; j++) { var found = false; for(var k = 0; k < items_used.length; k++) { if(items_used[k] == items[j]) { found = true; break; } } if(!found) items_compared.push(items[j]); } 

作为更快的解决方案可能:

 var j, itemsHash = {}; for (j = 0; j < items.length; j++) { itemsHash[items[j]] = true; } for (j = 0; j < itemsUsed.length; j++) { itemsHash[itemsUsed[j]] = false; } for (j in itemsHash) { if (itemsHash[j]) { itemsCompared.push(j); } } 

在O(n)时间运行,有更多的记忆。

基本上我会让第三个包含第一个中的所有元素,然后遍历第二个数组,删除第一个中找到的所有元素。

 var items_compared = items; for(int i = 0; i < items_used.length; ++i) { var indx = $.inArray(items_used[i], items_compared); if(indx != -1) items_compared.splice(indx, 1); }