How to find an intersection of array data in a script include

Milan13
Giga Expert

Hello,

I have two arrays and need to find  count of records which these arrays share in common.

Need to place this in a script include and make this as simple as possible.

The array are:

var createCaseRoles = ['sn_customerservice.customer', 'sn_customerservice.customer_case_manager', 'sn_customerservice.customer_admin', 'sn_customerservice.partner', 'sn_customerservice.partner_admin', 'sn_customerservice.consumer', 'sn_customerservice_agent', 'sn_customerservice_manager', 'sn_customerservice.consumer_agent', 'sn_customerservice_manager'];

var my_roles =['sn_customerservice.customer_admin', 'sn_customerservice.partner_admin', 'sn_customerservice.customer_case_manager' , 'snc_internal' , 'admin' , 'sn_customerservice.customer', 'sn_customerservice.partner' ,'security_admin'];

Any idea how to make this as simple as possible with ossible use inside scriprt include, need to call a method in scriot include returning count of records these array share in common.

Appreciate your help,

Milan

 

18 REPLIES 18

Array's are also an object. If you try creating an array and test it with typeof it will give return you type as an object which means getUserRoles() returns an array.

Regards,
Muhammad

Hi,

I tried this but it gave me undefined for the length

So on safer side I tried toString() and then split()

var my_roles = [];
my_roles = gs.getUser().getUserRoles();

gs.info(my_roles);

gs.info(my_roles.length);

Output:

find_real_file.png

Please check from your side as well

Regards
Ankur

Regards,
Ankur
✨ Certified Technical Architect  ||  ✨ 9x ServiceNow MVP  ||  ✨ ServiceNow Community Leader

Agree. You are right. 

 

Regards,
Muhammad

Hi,

Try below code,

 

checkUserRoles: function() {

this.arrautil = new global.ArrayUtil();
var my_roles;
my_roles = this.arrautil.convertArray(gs.getUser().getUserRoles());

var createCaseRoles = ['sn_customerservice.customer', 'sn_customerservice.customer_case_manager', 'sn_customerservice.customer_admin', 'sn_customerservice.partner', 'sn_customerservice.partner_admin', 'sn_customerservice.consumer', 'sn_customerservice_agent', 'sn_customerservice_manager', 'sn_customerservice.consumer_agent', 'sn_customerservice_manager'];
var intersectRoles = this.arrautil.intersect(my_roles, createCaseRoles);

return intersectRoles;


},

Milan13
Giga Expert

So the issue is that if I create array my_roles manually it retiurns arrInter with no problem, but when I create thea raay by my_roles = gs.getUser().getUserRoles(); it probably is not an array object as it does not work - some kind of convert issue...my_roles created manually gives result

 

//var my_roles = [];
// my_roles = gs.getUser().getUserRoles();


var my_roles = ['sn_customerservice.customer_admin', 'sn_customerservice.partner_admin', 'sn_customerservice.customer_case_manager', 'snc_internal', 'admin', 'sn_customerservice.customer', 'sn_customerservice.partner', 'security_admin'];


var createCaseRoles = ['sn_customerservice.customer', 'sn_customerservice.customer_case_manager', 'sn_customerservice.customer_admin', 'sn_customerservice.partner', 'sn_customerservice.partner_admin', 'sn_customerservice.consumer', 'sn_customerservice_agent', 'sn_customerservice_manager', 'sn_customerservice.consumer_agent', 'sn_customerservice_manager'];


var arr = new ArrayUtil();
var arrInter = arr.intersect(createCaseRoles, my_roles);

return arrInter;