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,

Was your query resolved as per your question or there was something missing?

Regards

Ankur

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

Hi Shaik,

I assume the value in the arrayList are the json keys

Use below code and check once; what I have done is

1) get all the keys from your json

2) then intersect and get the final array whose values are to be fetched from json string

var str = responseBody;
var parser = new JSONParser();
var parsedData = parser.parse(str).members; // LIST of users from 3rd users

// the values should be in string i.e. use quotes
var arrayList = ['shaik.irfan','robert.ramirez','anthony.gonzalvez'];

// get all the keys from your json
var keysArray = Object.keys(parsedData);

var arrayUtil = new ArrayUtil();
var finalKeyArray = arrayUtil.intersect(arrayList, keysArray);

// get only those keys for which you need to get the value

var finalObj = [];

//now iterate over finalKeyArray

for(var i=0;i<finalKeyArray.length;i++){

var value = parsedData[finalKeyArray[i]];

if(value!='')
finalObj.push(value.toString());
}

gs.info('Final Value is: ' + finalObj);


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

vkachineni
Kilo Sage
Kilo Sage

Why not use ArrayUtil

 

var arrayUtil = new ArrayUtil();
var parsedData = ["a", "b", "c"];
var arrayList = ["c", "d", "e"];
gs.print(arrayUtil.intersect(parsedData, arrayList));

*** Script: c

Please mark Correct and click the Thumb up if my answer helps you resolve your issue. Thanks!
Vinod Kumar Kachineni
Community Rising Star 2022

Hi Sir,

 

in parsedData i am getting JSON Object not sure how to acheive with arrayUtil method, if you dont mind can you reconstruct my code ?

 

parsedData Output ex: 

{"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 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