2015-04-03 97 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();