- 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:39 AM
Hi Shaik,
Was your query resolved as per your question or there was something missing?
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
‎08-20-2019 08:56 AM
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
Ankur
✨ Certified Technical Architect || ✨ 9x ServiceNow MVP || ✨ ServiceNow Community Leader
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎08-20-2019 08:31 AM
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
Vinod Kumar Kachineni
Community Rising Star 2022
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎08-20-2019 08:44 AM
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"},]
- 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