- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
08-20-2019 08:05 AM
Hi,
I am trying to get some data from 3rd party system and parsing that data to get the id of users.
var str = responseBody;
var parser = new JSONParser();
var parsedData = parser.parse(str).members; // LIST of users from 3rd users
arrayList = [shaik.irfan, robert.ramirez, anthony.gonzalvez];
var finalObj = [];
for(var k=0; k<arrayList.length; k++)
{
parsedData.forEach(function(element) {
if(element.name === arrayList[k]) {
finalObj.push(element.id);
}
});
}
what i am doing is from arrayList i am searching with each user id from the parsedData if i get any user i am adding it into finalObj array.
Now i want to optmize the code to not use for loop inside forEach loop again since i am getting a warning message "Don't make functions within a loop" i want to seperate above for loops
Solved! Go to Solution.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
08-20-2019 09:06 AM
var str = '{"ok":true,"members"::[{"id":"ABCED", "name" : "shaik.irfan", "email" : "abce@abc.com"},{"id":"ABCED", "name" : "anthoy.ramirez", "email" : "abce@abc.com"},{"id":"ABCED", "name" : "fernando", "email" : "abce@abc.com"},]}';
var parser = new JSONParser();
var parsedData = parser.parse(str).members; // LIST of member objects
gs.info(parsedData.length);
var members = [];
for(var member=0; member<parsedData.length; member++)
{
members.push(parsedData[member].name); //stores an array strings
}
gs.info(members);
//members is an array of strings
var arrayUtil = new ArrayUtil();
var arrayList = ["shaik.irfan", "robert.ramirez", "anthony.gonzalvez"]; //your keys.make sure these are strings
gs.info(arrayList );
gs.info(arrayUtil.intersect(members, arrayList));
*** Script: 3
*** Script: shaik.irfan,anthoy.ramirez,fernando
*** Script: shaik.irfan,robert.ramirez,anthony.gonzalvez
*** Script: shaik.irfan
Vinod Kumar Kachineni
Community Rising Star 2022
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
08-21-2019 02:27 AM
Hi Shaik,
Can you try this?
your previous code will remain the same only below part I have updated
this should work for multiple values;
the below code will run only for 1 index since only 1 value will be found;
you can try to run for multiple values by using below arrayList value
here shaik.irfan and anthoy.ramirez will be the intersection values and id corresponding to both would be printed
var arrayList = ["shaik.irfan", "anthoy.ramirez", "anthony.gonzalvez"];
var intersectArray = arrayUtil.intersect(members, arrayList);
var indexArray = [];
for(var i=0;i<parsedData.length;i++){
var value = parsedData[i].name;
var arrayUtil = new ArrayUtil();
if(arrayUtil.contains(intersectArray,value))
{
indexArray.push(value);
}
}
for(var j=0;j<indexArray.length;j++){
gs.info(parsedData[j].id);
}
Mark Correct if this solves your issue and also mark Helpful if you find my response worthy based on the impact.
Thanks
Ankur
Ankur
✨ Certified Technical Architect || ✨ 9x ServiceNow MVP || ✨ ServiceNow Community Leader