Need suggestion on using For & foreach loop

shaik_irfan
Tera Guru

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 

1 ACCEPTED SOLUTION

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
Please mark Correct and click the Thumb up if my answer helps you resolve your issue. Thanks!
Vinod Kumar Kachineni
Community Rising Star 2022

View solution in original post

10 REPLIES 10

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

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