2011-05-06 78 views
1

可能重复:
Simplest code for array intersection in javascript
How to merge two arrays in Javascript比较数组使用jQuery

有三个数组:

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

第一个是一般的,第二个是currenly项目正在使用。第三个包括第一个数组中的所有项目,女巫在第二个数字中没有提到。

如何从第一个数组中删除项目,女巫是在第二个中使用,并将结果写入第三个数组?我们应该得到items_new = Array(523, 334, 5346)345231被删除,因为它们在第二个数组中提到。

回答

6

你可以这样做:

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); 
    }); 

就是这样

+0

有趣。尝试过,但它不适合我。可能有一些标点符号错误? – James 2011-05-06 19:57:51

+0

我测试过了,工作正常。你确定你包含jquery吗? – 2012-03-08 12:57:20

4

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

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]); 
} 
+0

你没有要求过快。你只是要求解决方案。 – Tejs 2011-05-07 02:16:23

0

基本上我会让第三个在第一个中有所有元素,然后通过第二个数组循环删除第一个中找到的所有元素。

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); 
} 
1

作为也许是更快的解决方案:

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)的时间,多一点记忆。