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 06:28 AM
Hi Chinmayee,
Can you share your complete code and tell me your current output and expected output. That would help me to fix the issue faster.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎10-26-2020 06:56 AM
I have pasted all those detail in my first post. Let me know if any other log you need.
My requirement is :
I need to get attachment sys_id, record_id and other details for each KB article. Please consider the fact that one article might have many attachments and some might have none.
After getting those object arrays, I need to pass it to another function. which will attach that file to our instance and then I create a map of {"other instance sys_id", "our instance sys_id"} hope i made it clear.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎10-26-2020 04:31 AM
Hi,
before pushing the object inside the array check if it is empty or not
something like this
var arr = []; // your array of json objects
var finalArray = [];
for(var i in arr){
if(Object.keys(arr[i]).length === 0){
// empty so skip
}
else{
finalArr.push(arr[i]);
}
}
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 04:56 AM
I tried as per ur advise. Changed in script include as below. but Its still the same
for(var a=0;a<arrayString.length;a++){
kbUpload.getArticle(arrayString);}
for(var b=0;b<arrayString.length;b++){
contentArr+= kbUpload.getAttachment(arrayString[b]);
var finalArray = [];
for(var i in contentArr){
if(Object.keys(contentArr[i]).length === 0){
gs.log("ignore");
}
else{
finalArr.push(contentArr[i]);
}
}
}
Its still the same. Did I code it wrong?
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎10-26-2020 05:22 AM
Hi,
Do you want to check for empty element in contentArr ?
if yes then use this
var finalArray = [];
for(var i in contentArr){
if(contentArr[i].length === 0){
gs.log("ignore");
}
else{
finalArr.push(contentArr[i]);
}
}
Regards
Ankur
Ankur
✨ Certified Technical Architect || ✨ 9x ServiceNow MVP || ✨ ServiceNow Community Leader