2011-05-06 113 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)的時間,多一點記憶。