Split(",") return [ and ] in 1st and last element
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
09-15-2022 01:01 PM
I have a client script that gets array of tables and I need to parse them to get the 1st element [might required 1 and 2 elements] . When I use Split (','), it returns first and last element with [xxx , yyy].
//Client Script
function onSubmit() {
var category = g_form.getValue('category');
var ci = g_form.getValue('cmdb_ci');
if (category == 'database') {
var ga = new GlideAjax('GetParentClass');
ga.addParam('sysparm_name', 'GetParentClassName');
ga.addParam('selected_ci', ci);
ga.getXMLWait();
var answer = ga.getAnswer();
answer = answer.toString();
answer = answer.split(',');
alert('answer---1---is ----' + answer);
alert('answer.length is ----' + answer.length);
for (var i = 0; i < answer.length; i++) {
alert('answer---1---is ----' + answer[i]);
if (answer[i] == 'cmdb_ci_database') {
alert('Alert Message');
}
}
}
}
//Script Include
var GetParentClass = Class.create();
GetParentClass.prototype = Object.extendsObject(AbstractAjaxProcessor, {
GetParentClassName: function() {
var selected_ci = this.getParameter('selected_ci');
var ci_class;
var grCi = new GlideRecord('cmdb_ci');
if (grCi.get(selected_ci)) {
ci_class = grCi.sys_class_name;
var tu = new TableUtils(ci_class);
var tables = tu.getTables();
return tables.toString();
}
},
type: 'GetParentClass'
});
//******ALERTS********
answer---1---is ----[cmdb_ci_pc_hardware, cmdb_ci_computer, cmdb_ci_hardware, cmdb_ci, cmdb]
answer.length is ----5
answer---1---is ----[cmdb_ci_pc_hardware //Issuue is with 1st and last element
answer---1---is ---- cmdb]

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
09-15-2022 01:55 PM
Yes, because you are spliting an array string. Please use the below code to remove the "[" and "]", and it should work.
answer=answer. slice(1, -1);
So your client script should be
***********************************
function onSubmit() {
var category = g_form.getValue('category');
var ci = g_form.getValue('cmdb_ci');
if (category == 'database') {
var ga = new GlideAjax('GetParentClass');
ga.addParam('sysparm_name', 'GetParentClassName');
ga.addParam('selected_ci', ci); ga.getXMLWait();
var answer = ga.getAnswer();
answer = answer.toString();
answer=answer. slice(1, -1);
answer = answer.split(',');
alert('answer---1---is ----' + answer);
alert('answer.length is ----' + answer.length);
for (var i = 0; i < answer.length; i++){
alert('answer---1---is ----' + answer[i]);
if (answer[i] == 'cmdb_ci_database')
{ alert('Alert Message');
}
}
}
}
Output-
*** Script: answer---1---is ----cmdb_ci_pc_hardware, cmdb_ci_computer, cmdb_ci_hardware, cmdb_ci, cmdb
*** Script: answer.length is ----5
*** Script: answer---1---is ----cmdb_ci_pc_hardware
*** Script: answer---1---is ---- cmdb_ci_computer
*** Script: answer---1---is ---- cmdb_ci_hardware
*** Script: answer---1---is ---- cmdb_ci
*** Script: answer---1---is ---- cmdb
Regards,
Nayan
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
09-15-2022 01:57 PM
Hi, when you alert
alert('answer---1---is ----' + answer);
you are referencing the entire array object, if you want the first element the it is simply answer[0]
You may also need to stringify the array element before you display it (you would need too in order to log server side) as displayed values can look correct but the value shown may not be usable within the context of your following code, so perhaps try answer[0].toString(); and the last element would be answer[answer.length -1].toString()
You may find it helps understanding if you reproduce\test in a background script,
also I think it best practice to use an new variable name if you change the variable type,
this prevents confusion for those who follow and also ensure that the variable is consistent throughout code regardless of any logic within the code.
answerArray = ['element_0','elemet_1','element_2','cmdb_ci_database','element_4','element_5'];
gs.info('answerArray type = ' + typeof(answerArray));
answerString = answerArray.toString();
gs.info('answerString type = ' + typeof(answerString));
answer = answerString.split(',');
gs.info('answer type = ' + typeof(answer));
gs.info('answer = ' + answer);
gs.info('answer.toString() = ' + answer.toString());
gs.info('answer[0] type = ' + typeof(answer[0]));
gs.info('answer[0] = ' + answer[0]);
gs.info('answer[0].toString() = ' + answer[0].toString());
gs.info('answer.length = ' + answer.length);
var lastElement = answer.length -1;
gs.info('lastElement index = ' + lastElement);
gs.info('answer[lastElement] type = ' + typeof(answer[lastElement]));
gs.info('answer[lastElement] = ' + answer[lastElement]);
gs.info('answer[lastElement.toString() = ' + answer[lastElement].toString());
for (var i = 0; i < answer.length; i++) {
if (answer[i].toString() == 'cmdb_ci_database') {
gs.info('Element index for cmdb_ci_database = ' + i);
}
}