Find max number from array

dvelloriy
Kilo Sage

Hi All,

 

I have the below code but its not working as expected. I am storing few numbers in RITM description and wanted to obtain the max number.

----------------

var ritmAT = [];
        var gr = new GlideRecord("sc_req_item");
        gr.addEncodedQuery("cat_item=4410e34a1b649a101a29eb98b04bcbfe^sys_created_onONToday@javascript:gs.beginningOfToday()@javascript:gs.endOfToday()");
        gr.orderByDesc('sys_created_on');
        gr.setLimit(1);
        gr.query(); //101, 102
        gs.info("$$$Records in RITM table: " + gr.getRowCount());
        while (gr.next()) {
            ritmAT.push(gr.description); //101, 102
        }
        gs.info("$$$ RITMAT: " + ritmAT);
        var maxNum = Math.max.apply(null,ritmAT); //102
        gs.info("$$$Max Number: " + maxNum);
 
dvelloriy_0-1730128407109.png

 

1 ACCEPTED SOLUTION

Forcing the retrieved description to a string should remedy that

    var descArr = gr.description.toString().split(',');

View solution in original post

9 REPLIES 9

Chaitanya ILCR
Kilo Patron

Hi @dvelloriy ,
Try this out

var ritmAT = [];
var gr = new GlideRecord("sc_req_item");
gr.addEncodedQuery("cat_item=4410e34a1b649a101a29eb98b04bcbfe^sys_created_onONToday@javascript:gs.beginningOfToday()@javascript:gs.endOfToday()");
gr.orderByDesc('sys_created_on');
gr.setLimit(1);
gr.query(); //101, 102
gs.info("$$$Records in RITM table: " + gr.getRowCount());
while (gr.next()) {
    ritmAT = gr.getValue('description').split(','); //101, 102
}
ritmAT = ritmAT.map(function(i){return parseInt(i)});
gs.info("$$$ RITMAT: " + ritmAT);
var maxNum = Math.max.apply(null, ritmAT); //102
gs.info("$$$Max Number: " + maxNum);

 

Mark this has helpful and correct if it works.

 

Thanks,

Chaitanya

Thanks Chaitanya, tried it but its still not working. Now its not even displaying the info message for max number so i guess its getting failed before that.

Brad Bowman
Kilo Patron
Kilo Patron

If you are storing more than just one number value in each RITM description, then your array is going to contain members that are not numbers (rather one member will be "243020001,243020002") so a math method will not return a number.  If this is the case, you can use something like this:

var ritmAT = [];
var gr = new GlideRecord("sc_req_item"); gr.addEncodedQuery("cat_item=4410e34a1b649a101a29eb98b04bcbfe^sys_created_onONToday@javascript:gs.beginningOfToday()@javascript:gs.endOfToday()");
gr.orderByDesc('sys_created_on');
gr.setLimit(1);
gr.query(); //101, 102
gs.info("$$$Records in RITM table: " + gr.getRowCount());
while (gr.next()) {
    var descArr = gr.description.split(',');
    for (var i = 0; i < descArr.length; i++) {
	    ritmAT.push(descArr[i]);
    }
}
gs.info("$$$ RITMAT: " + ritmAT);
var maxNum = Math.max.apply(null,ritmAT); //102
gs.info("$$$Max Number: " + maxNum);

 

Thanks Brad. I tried this approach as well, now its giving an error message:

Error: Cannot find function split in object .,Detail: Cannot find function split in object .

 

Updated script:

var ritmAT = [];
        var gr = new GlideRecord("sc_req_item");
        gr.addEncodedQuery("cat_item=4410e34a1b649a101a29eb98b04bcbfe^sys_created_onONToday@javascript&colon;gs.beginningOfToday()@javascript&colon;gs.endOfToday()");
        gr.orderByDesc('sys_created_on');
        gr.setLimit(2);
        gr.query(); //101, 102
        gs.info("$$$Records in RITM table: " + gr.getRowCount());
        while (gr.next()) {
            var descArr = gr.description.split(',');
    for (var j = 0; j < descArr.length; j++) {
        ritmAT.push(descArr[j]); //101, 102
        }}
        //ritmAT = ritmAT.map(function(i){return parseInt(i)});
        gs.info("$$$ RITMAT: " + ritmAT);
        var maxNum = Math.max.apply(null,ritmAT); //102
        gs.info("$$$Max Number: " + maxNum);
 

 

Forcing the retrieved description to a string should remedy that

    var descArr = gr.description.toString().split(',');