Compare arrays with jQuery
本问题已经有最佳答案,请猛点这里访问。
Possible Duplicates:
Simplest code for array intersection in javascript
How to merge two arrays in Javascript
号
有三个数组:
1 2 3 | var items = Array(523,3452,334,31,5346); var items_used = Array(3452,31,4123); var items_new = Array(); |
第一个是通用的,第二个是当前使用的物品。第三个包含第一个数组中的所有项,第二个数组中没有提到witch。
如何从第一个数组项中移除,在第二个数组中使用witch,并将结果写入第三个数组?
我们应该得到
你可以这样做:
1 2 3 4 5 6 7 8 | 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循环呢?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | 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]); } |
作为更快的解决方案,可能:
1 2 3 4 5 6 7 8 9 10 11 12 | 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)时间内运行,内存多一点。
基本上,我会让第三个元素在第一个元素中,然后循环使用第二个数组,删除在第一个元素中找到的所有元素。
1 2 3 4 5 6 7 | 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); } |
号