2015-04-03 80 views
1

我有兩個電子郵件地址陣列,我試圖找出兩者的區別。其中一個數組包含當前的電子郵件地址。另一個包含當前組成員的電子郵件地址。我正在使用當前電子郵件地址更新組列表,並刪除組中不在當前電子郵件地址中的地址。我無法圍繞如何讓我的for循環來實現這一目標。這是我的代碼迄今...發現兩個陣列的差異

for(i = 0; i < GROUP_USERS.length; i++){ 
    var currentMember = GROUP_USERS[i]; 
    for(x = 0; x < DOMAIN_USERS.length; x++){ 
     if(DOMAIN_USERS[x] != currentMember){ 
     continue; 
     } else { 

     } 
    } 

這似乎我需要測試我的循環結束,或者什麼。

編輯

我使用谷歌Apps腳本(SDK)。我將不得不將所有需要刪除的電子郵件推送到一個數組中,然後使用GroupApps類從組中刪除這些電子郵件。然後,我需要將尚未駐留在該組中的DOMAIN_USERS電子郵件地址推送給該組。所以,基本上,我會有兩個數組。一組需要從組中刪除的電子郵件以及一組需要添加到組中的電子郵件。希望這樣做更有意義。

+0

大家知道,這裏的「繼續」會導致程序跳回到內部for循環的開始處(下一次迭代)。如果我們可以看到示例「GROUP_USERS」和「DOMAIN_USERS」數組值,以及最後希望他們看起來像什麼,這可能會有所幫助。 – 2015-04-03 12:29:44

+0

@Cory它繼續下一次迭代 – 2015-04-03 12:30:43

+1

這不是最終的結果,「GROUP_USERS」與「DOMAIN_USERS」相同嗎?如果地址位於「DOMAIN_USERS」而不是「GROUP_USERS」中,您希望發生什麼情況,反之亦然?輸入和期望輸出的例子會有所幫助。 – Stuart 2015-04-03 12:30:57

回答

2

您需要創建另一個變量來檢查currentMember存在DOMAIN_USERS陣列 後,你可以從GROUP_USERS陣列

for (i = 0; i < GROUP_USERS.length; i++) { 
    var currentMember = GROUP_USERS[i]; 
    var isContain = false; 

    for (x = 0; x < DOMAIN_USERS.length; x++) { 
     if (DOMAIN_USERS[x] == currentMember) { 
      isContain = true; 
     } 
    } 
    if (!isContain) { 
     emailTobeRemove.pop(currentMember); 
     i--; 
    } 
} 
0

如果我理解正確的話,你要刪除從GROUP_USERS不在所有emailaddresses刪除DOMAIN_USERS,然後將不在GROUP_USERS中的DOMAIN_USERS中的電子郵件地址添加到GROUP_USERS數組中,是否正確?

你可以先製作一個「包含」功能(兼容,你可以用它來代替的indexOf()):

function contains(arr, val) { 
    for (var i = 0; i < arr.length; i++) { 
     if (arr[i] === val) { 
     return true; 
     } 
    } 
    return false; 
} 

然後從不在DOMAIN_USERS GROUP_USERS刪除所有emailaddresses。在for循環中:

for(i=0;i < GROUP_USERS.length; i++) { 
    if(!contains(DOMAIN_USERS, GROUP_USERS[i])) { 
     GROUP_USERS.splice(i, 1); 
    } 
} 

然後又for循環,從DOMAIN_USERS添加到那些GROUP_USERS:

for(i=0; i < DOMAIN_USERS.length; i++) { 
    if(!contains(GROUP_USERS, DOMAIN_USERS[i])) { 
     GROUP_USERS.push(DOMAIN_USERS[i]); 
    } 
} 
+0

Lol,或者只是做了user47448855說,導致重新思考你說的邏輯,他確實是正確的,GROUP_USERS只會變成DOMAIN_USERS – Guinn 2015-04-03 12:59:22

1

除非我誤解了同樣的結果可以用

能夠到達的邏輯
GROUP_USERS = DOMAIN_USERS; 
+0

我應該提到我使用的是Google Apps SDK,因此我不能只說'GROUP_USERS = DOMAIN_USERS'。 – dericcain 2015-04-03 13:51:22

0

如果您正在尋找兩個陣列中的差異
使用gripinarray
demo

0

的2列出了您需要在DOMAIN_USERS和DOMAIN_USERS在GROUP_USERS的GROUP_USERS的relative complement。因此定義一個函數,查找不在第二個數組b中的數組a的所有成員,然後使用該函數查找需要添加和刪除哪些電子郵件。

function relComp(a, b) { 
    var r = []; 
    for (var i = 0; i < a.length; i++) { 
     if (b.indexOf(a[i]) == -1) { 
      r.push(a[i]); 
     } 
    } 
    return r; 
} 
var toDelete = relComp(GROUP_USERS, DOMAIN_USERS); 
var toAdd = relComp(DOMAIN_USERS, GROUP_USERS); 

relComp也可以用一個過濾器來寫:

function relComp(a, b) { 
    return a.filter(function(item) { 
     return b.indexOf(item) == -1; 
    }); 
} 

JSFiddle

0

它使用開放源碼的項目很容易jinqJs

See Fiddle Example

//Use jsJinq.com open source library 
var current = ["[email protected]", "[email protected]", "[email protected]", "[email protected]"]; 
var group = ["[email protected]", "[email protected]", "[email protected]", "[email protected]"]; 

var currentComplex = [{email:"[email protected]"},{email: "[email protected]"}, {email:"[email protected]"}, {email:"[email protected]"}]; 

//Gets emails that are in current not in group 
var result = jinqJs().from(current).not().in(group).select(); 
var result2 = jinqJs().from(currentComplex).not().in(group, 'email').select();