Split(",") return [ and ] in 1st and last element

Kumar38
Kilo Sage

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]
2 REPLIES 2

Nayan Mahato
Tera Guru

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

Tony Chatfield1
Kilo Patron

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);
}
}