How to remove empty objects from array of objects?
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎10-26-2020 03:38 AM
Hi,
In an integration , I have to pass the sys_id and fetch the attachments of that record.
-some records have multiple attachments and some have none
-Passing the sys_id in for loop.
Issue : Getting empty arrays along with arrays that has values
below is my script include
getAttachment : function(arrayString){
var r = new sn_ws.RESTMessageV2('Knowledge Integration for Bulk upload', 'Get Article');
r.setStringParameter('Accept', 'application/json');
r.setEndpoint('https://bayersidev.service-now.com/api/sn_km_api/knowledge/articles/'+arrayString);
var response = r.execute();
var responseBody = response.getBody();
var parser = new JSONParser();
var parsed = parser.parse(responseBody);
var recordSysId=[];
if(parsed.result.attachments.length !=undefined)
{
var contentArr = [];
var num = new GlideRecord(parsed.result.template_table);
num.addQuery("u_bayer_fmo_number",parsed.result.number);
num.query();
if(num.next()){
recordSysId =num.sys_id;
}
var attachmentLength = parsed.result.attachments.length;
for(var n =0;n<attachmentLength;n++)
{
var attachment ={};
attachment.attachmentID=parsed.result.attachments[n].sys_id;
attachment.sysid=parsed.result.sys_id;
attachment.file_name = parsed.result.attachments[n].file_name;
attachment.size_bytes = parsed.result.attachments[n].size_bytes;
attachment.table=parsed.result.template_table;
attachment.recordSysId = recordSysId;
contentArr.push(attachment);
}
gs.log("attachment json :"+contentArr);
return JSON.stringify(contentArr);
}
},
Below is my scheduled job
var arrayString=[],contentArr=[],attachmentMap=[],embeddedID=[],embedContentMap=[];
var kbUpload = new KnowledgeBulkUpload;
arrayString = kbUpload.searchArticle();
gs.log("ArrayString :"+arrayString.length);//
for(var a=0;a<arrayString.length;a++){
kbUpload.getArticle(arrayString[a]);}
for(var b=0;b<arrayString.length;b++){
contentArr = kbUpload.getAttachment(arrayString[b]);
}
gs.log("Attachments :"+contentArr.length);
for(var i=0;i<contentArr.length;i++){
attachmentMap = kbUpload.attachmentUpdate(contentArr[i]);}
below are the logs
Attachments :[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][{"attachmentID":"128c35941b9d14541c6442eacd4bcbf2","sysid":"828cf9541b9d14541c6442eacd4bcbc4","file_name":"JIRA Workflow Demand Management (1).pptx","size_bytes":"576420","table":"u_kb_template_end_user"},{"attachmentID":"2e8cb9941b9d14541c6442eacd4bcb4c","sysid":"828cf9541b9d14541c6442eacd4bcbc4","file_name":"Workflow Status Matrix.xlsm","size_bytes":"101326","table":"u_kb_template_end_user"},{"attachmentID":"5e8c35941b9d14541c6442eacd4bcbf0","sysid":"828cf9541b9d14541c6442eacd4bcbc4","file_name":"JIRA with myCloud.docx","size_bytes":"736265","table":"u_kb_template_end_user"}],[],[],[]
attachment json :
How do I eliminate the empty ones and pass only the ones with value to my script include? I need to pass each json object to another function and it should run only three times as obj.length.
Please help.
Thanks & Regards,
Chinmayee Mishra
- Labels:
-
Integrations
-
Script Debugger
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎10-26-2020 05:42 AM
yes, It doesn't print finalArray.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎10-26-2020 05:48 AM
the earlier script I shared worked fine
Script I tried: It has 1 empty object in the array in 2nd position; it removed that
var contentArr = [{"name":"abel"},{},{"name":"beth"}];
var finalArr = [];
for(var i in contentArr){
if(Object.keys(contentArr[i]).length === 0){
gs.info("ignore");
}
else{
finalArr.push(contentArr[i]);
}
}
gs.info('Original array'+JSON.stringify(contentArr));
gs.info('New array'+JSON.stringify(finalArr));
Output:
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
‎10-26-2020 06:16 AM
The reason why its working for you is because 1 array is holding multiple arrays.
[{},{},{}] . for me its [{a},{},{}][{},{},{}][{},{},{}][][][][]
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎10-26-2020 06:27 AM
Hi,
in that case you can iterate over each array element which itself is an array and then run the check on that and push in final array
can you share your complete array
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
‎10-26-2020 06:44 AM
Hi,
Its in my first post. Where I posted the question. Would you mind letting me know why the recordSysId is not getting added to the json? I added logs , inside If block. It prints. Inside for loop it doesn't. I even tried pasting that glide block to fetch the recordsysId inside for loop. It doesn't work. Can you advise me on that?
Thanks in advance