我有两个电子邮件地址数组,我试图找到两者的区别。其中一个数组包含当前的电子邮件地址。另一个包含当前组成员的电子邮件地址。我正在使用当前电子邮件地址更新组列表,并删除组中不在当前电子邮件地址中的地址。我无法理解如何通过我的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 {
}
}
似乎我需要测试循环结束或其他什么。
修改
我正在使用Google Apps脚本(SDK)。我将不得不将需要删除的所有电子邮件推送到阵列,然后使用GroupApps类从组中删除这些电子邮件。然后,我需要将尚未驻留在组中的DOMAIN_USERS
电子邮件地址推送到该组。所以,基本上,我将有两个数组。需要从组中删除的一组电子邮件和需要添加到组中的一组电子邮件。希望这更有意义。
答案 0 :(得分:2)
您需要创建另一个变量来检查DOMAIN_USERS数组中是否存在currentMember 之后,您可以将其从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--;
}
}
答案 1 :(得分:1)
除非我误解逻辑,否则可以用
达到相同的结果GROUP_USERS = DOMAIN_USERS;
答案 2 :(得分:0)
如果我理解正确您要删除GROUP_USERS中不在DOMAIN_USERS中的所有电子邮件地址,请将GROUP_USERS中不在GROUP_USERS中的电子邮件地址添加到GROUP_USERS数组中,是吗?
你可以先制作一个&#39;包含&#39;函数(为了兼容性,你可以使用它而不是indexOf()):
function contains(arr, val) {
for (var i = 0; i < arr.length; i++) {
if (arr[i] === val) {
return true;
}
}
return false;
}
然后删除GROUP_USERS中不在DOMAIN_USERS中的所有电子邮件地址。在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]);
}
}
答案 3 :(得分:0)
如果你正在寻找两个阵列的差异
使用grip
和inarray
demo
答案 4 :(得分:0)
您需要的2个列表是DOMAIN_USERS中GROUP_USERS的relative complement和GROUP_USERS中的DOMAIN_USERS。因此,定义一个函数,查找不在第二个数组a
中的数组b
的所有成员,然后使用它来查找需要添加和删除的电子邮件。
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;
});
}
答案 5 :(得分:0)
使用开源项目jinqJs
非常容易//Use jsJinq.com open source library
var current = ["a@yahoo.com", "b@yahoo.com", "c@yahoo.com", "d@yahoo.com"];
var group = ["a@yahoo.com", "d@yahoo.com", "yyy@yahoo.com", "xxx@yahoo.com"];
var currentComplex = [{email:"a@yahoo.com"},{email: "b@yahoo.com"}, {email:"c@yahoo.com"}, {email:"d@yahoo.com"}];
//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();