I want Compare two arrays and return same elements

Mannam Praveen
Tera Expert

I want Compare two arrays and if same values are same return only those elements in the array. 

Here my script can someone help here - 

 

Logic we are trying implement - 

1. first we need to get login user manager and then fetch who reporting members logined user and his manager. 

2. fetching userinfo from sys_user_grmember table who are part of app group. 

3. we need compare step 1 and step 2 sys IDs and only which are common in both arrays

@Ankur Bawiskar  @Murthy Ch 

var arr = [];
var arr1 = [];
var arr2 = [];
var finial = [];
var i;
// var obj = {};
var currentUserManager;
var currentUser = gs.getUserID();
//gs.info('loginedUser' + currentUser);
var userGr = new GlideRecord('sys_user');
userGr.addQuery('sys_id', currentUser);
userGr.query();
if (userGr.next()) {
    currentUserManager = userGr.manager;
    var manager = userGr.manager;
    //gs.info('loginedUser Manager' + currentUserManager);
    var direct = gs.getUserID();
    //gs.info('loginedUser Name' + direct);
    var grUser = new GlideRecord("sys_user");
    grUser.addQuery("manager", manager);
    grUser.query();
    while (grUser.next()) {
        arr.push(grUser.sys_id.toString());
    }
    var grUser1 = new GlideRecord("sys_user");
    grUser1.addQuery("manager", direct);
    grUser1.query();
    while (grUser1.next()) {
        //gs.info('arr1'+ grUser1.name);
        arr1.push(grUser1.sys_id.toString());
    }
    arr2 = arr1 + arr;
    var obj1 = {};
        obj1 = JSON.parse(arr2);
        //gs.info(obj1.length);
    //gs.info(arr);
    var SA1 = [];
    var groupMember= new GlideRecord("sys_user_grmember");
    groupMember.addEncodedQuery('group.nameLIKEApp');
    groupMember.query();
    while (groupMember.next()) {
        SA1.push(groupMember.user.sys_id.toString());
        var obj = {};
        obj = JSON.parse(SA1);
        gs.info(obj);
    }
    for (i=0; i<=arr2.length; i++) {
        gs.info(arr2.length);
        if(obj1[i] == obj[i]) {
            finial.push(obj1[i]);
            //gs.info(finial);
    }
    }
 }
1 ACCEPTED SOLUTION

Sid_Takali
Kilo Patron
Kilo Patron

Hi @Mannam Praveen  Try below code

(function() {
    var arr = [];
    var arr1 = [];
    var final = [];
    
    var currentUser = gs.getUserID();
    var userGr = new GlideRecord('sys_user');
    userGr.addQuery('sys_id', currentUser);
    userGr.query();
    
    if (userGr.next()) {
        var currentUserManager = userGr.manager; // Manager of the logged-in user
    
        var grUser = new GlideRecord('sys_user');
        grUser.addQuery('manager', currentUserManager);
        grUser.query();
        while (grUser.next()) {
            arr.push(grUser.sys_id.toString());
        }
        
        var grUser1 = new GlideRecord('sys_user');
        grUser1.addQuery('manager', currentUser);
        grUser1.query();
        while (grUser1.next()) {
            arr1.push(grUser1.sys_id.toString());
        }
        
        var combinedArray = arr.concat(arr1);

        var groupMember = new GlideRecord('sys_user_grmember');
        groupMember.addEncodedQuery('group.nameLIKEApp'); // Adjust the query to your group name
        groupMember.query();
        
        var groupMembers = [];
        while (groupMember.next()) {
            groupMembers.push(groupMember.user.sys_id.toString());
        }
        final = combinedArray.filter(function(value) {
            return groupMembers.indexOf(value) !== -1;
        });
        gs.info('Common Users: ' + final.join(', '));
    }
})();

View solution in original post

2 REPLIES 2

Sid_Takali
Kilo Patron
Kilo Patron

Hi @Mannam Praveen  Try below code

(function() {
    var arr = [];
    var arr1 = [];
    var final = [];
    
    var currentUser = gs.getUserID();
    var userGr = new GlideRecord('sys_user');
    userGr.addQuery('sys_id', currentUser);
    userGr.query();
    
    if (userGr.next()) {
        var currentUserManager = userGr.manager; // Manager of the logged-in user
    
        var grUser = new GlideRecord('sys_user');
        grUser.addQuery('manager', currentUserManager);
        grUser.query();
        while (grUser.next()) {
            arr.push(grUser.sys_id.toString());
        }
        
        var grUser1 = new GlideRecord('sys_user');
        grUser1.addQuery('manager', currentUser);
        grUser1.query();
        while (grUser1.next()) {
            arr1.push(grUser1.sys_id.toString());
        }
        
        var combinedArray = arr.concat(arr1);

        var groupMember = new GlideRecord('sys_user_grmember');
        groupMember.addEncodedQuery('group.nameLIKEApp'); // Adjust the query to your group name
        groupMember.query();
        
        var groupMembers = [];
        while (groupMember.next()) {
            groupMembers.push(groupMember.user.sys_id.toString());
        }
        final = combinedArray.filter(function(value) {
            return groupMembers.indexOf(value) !== -1;
        });
        gs.info('Common Users: ' + final.join(', '));
    }
})();

Thanks for the Script. it is working in the background script but my requirement is Make it Dynamic filter. so for that i have used same code in script include it is working when calling background scrip but it is not showing any records. can you please help me here

Created the dynamic filter on sys_user as we are getting user SYSID's 

 

MannamPraveen_0-1725121817282.png

If i navigate sys_user table and select dynamic and selection option it is not showing any records. 

 

MannamPraveen_1-1725121929034.png

Below example of I filter similary i need to see user records for the given code; 

MannamPraveen_2-1725122058724.png

Please help here