Reputation: 79
I've got four lists - two for users and two for groups. I must check that in first users list they are users, which are not in second list.
My code:
importPackage(java.io);
importPackage(java.lang);
var list1 = "Han SOLO, Luke SKYWALKER, Darth VADER, Boba FETT".split(', ')
,list2 = "Luke SKYWALKER, Han SOLO, Lando CALRISSIAN, Boba FETT".split(', ')
// group lists
,group1 = "Group1, Group1, Group1, Group2".split(', ')
,group2 = "Group1, Group1, Group2, Group2".split(', ')
,j = 0
,msg = "";
for(var j = 0; j < list2.length; j++) {
if (list1.indexOf(list2[j]) == -1)
msg = msg + list1[j] + " has been added to " + group1[j] + "<br />";
}
print(msg);
The results of this code is:
Darth VADER has been added to Group1
This result is good for me, but when I make that change:
var list1 = "Han SOLO, Luke SKYWALKER, Darth VADER, Boba FETT".split(', ')
,list2 = "Luke SKYWALKER, Han SOLO, Darth VADER, Boba FETT".split(', ')
// group lists
,group1 = "Group1, Group1, Group1, Group2".split(', ')
,group2 = "Group1, Group1, Group2, Group2".split(', ')
result is empty, but it should be:
Darth VADER has been added to Group1
I wonder what I should change, to correct this second script (where both users list are same).
Upvotes: 0
Views: 49
Reputation: 13381
you can do some prepare before checking:
1) group by users like
function group(users, groups) {
var result = {};
for (var i = 0; i < users.length; i++) {
var user = users[i];
if (!result[user]) result[user] = {};
result[users[i]][groups[i]] = true;
}
return result;
}
2) check groups defferent like
function comp(one, two) {
function getGroups(u) {
var groups = [];
for (var i in u) groups.push(i);
return groups;
}
var res = {};
for (var i in one) {
if (!two[i]) {
res[i] = getGroups(one[i]);
} else {
var g = [],
g1 = one[i],
g2 = two[i];
for (var j in g1) {
if (!g2[j]) g.push(j);
}
res[i] = g;
}
}
return res;
}
as result we have object like
{
"Han SOLO": [],
"Luke SKYWALKER": [],
"Darth VADER": [
"Group1"
],
"Boba FETT": []
}
so with simple loop we can get all info about defferent like
var msg = '';
for (var i in res) {
if (res[i].length) {
msg += 'user ' + i + ' added in group: ' + res[i].join() + '<br>';
}
}
var list1 = "Han SOLO, Luke SKYWALKER, Darth VADER, Boba FETT".split(', '),
list2 = "Luke SKYWALKER, Han SOLO, Darth VADER, Boba FETT".split(', ')
// group lists
,
group1 = "Group1, Group1, Group1, Group2".split(', '),
group2 = "Group1, Group1, Group2, Group2".split(', ');
function group(users, groups) {
var result = {};
for (var i = 0; i < users.length; i++) {
var user = users[i];
if (!result[user]) result[user] = {};
result[users[i]][groups[i]] = true;
}
return result;
}
function comp(one, two) {
function getGroups(u) {
var groups = [];
for (var i in u) groups.push(i);
return groups;
}
var res = {};
for (var i in one) {
if (!two[i]) {
res[i] = getGroups(one[i]);
} else {
var g = [],
g1 = one[i],
g2 = two[i];
for (var j in g1) {
if (!g2[j]) g.push(j);
}
res[i] = g;
}
}
return res;
}
var res = comp(group(list1, group1), group(list2, group2));
var msg = '';
for (var i in res) {
if (res[i].length) {
msg += 'user ' + i + ' added in group: ' + res[i].join() + '<br>';
}
}
document.getElementById('res').innerHTML = msg;
<p id="res"></p>
Upvotes: 2