How to find an intersection of array data in a script include
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
ā09-03-2020 04:16 AM
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

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
ā09-03-2020 06:43 AM
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.
Muhammad
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
ā09-03-2020 06:26 AM
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:
Please check from your side as well
Regards
Ankur
Ankur
⨠Certified Technical Architect || ⨠9x ServiceNow MVP || ⨠ServiceNow Community Leader

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
ā09-03-2020 06:50 AM
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
ā09-03-2020 05:48 AM
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;
},
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
ā09-03-2020 06:59 AM
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;