数组遍历求最大值问题

需求如下:

1、在记录列表里,批量删除只允许在查看具体人员的记录时才允许批量删除;

2、查询所有记录时批量按钮不可用;

3、多条记录时,操作日期最大的记录不允许删除;

4、若记录只有一条不允许删除

功能实现:

对操作日期的扩展控件进行遍历查找出最大值,对于勾选复选框对应的操作日期组成的数组,如果包含最大值,则删除按钮不可用,反之删除按钮可用。。。

现在有个问题,最大值刷新后会变化,如图:

第一次访问时是正常的:

image.png

刷新后就变成:

image.png

以下是我写的代码:

//建立json数组

var op = _g().getWidgetsByName("opdate");

var json = new Array();

if (typeof(op[0]) != "undefined") {

for (i = 0; i < op.length; i++) {

var oprow = FR.cellStr2ColumnRow(op[i].options.location).row;

//获取行号

var opcol = FR.cellStr2ColumnRow(_g().getWidgetByName("opdate").options.location).col;

var value = _g().getCellValue(0, opcol, oprow);

json.push(value);

}else {

var oprow = FR.cellStr2ColumnRow(_g().getWidgetByName("opdate").options.location).row;

//获取行号

var opcol = FR.cellStr2ColumnRow(_g().getWidgetByName("opdate").options.location).col;

var value = _g().getCellValue(0, opcol, oprow);

json.push(value);

}

//获取日期型数组json的最大值:

Array.prototype.max = function() {

var max = this[0];

this.forEach(function(ele, index, json) {

if (ele > max) {

max = ele;

}else{max=ele;}

})

return max;

}

datemax = json.max();

//alert(datemax);

//根据勾选生成操作日期数组

var boxes = _g().getWidgetsByName("box");

var oparr = new Array();

var delarr = new Array();

if (typeof(boxes[0]) != "undefined") {

for (i = 0; i < boxes.length; i++) {

if (boxes[i].getValue() == true) {

var row = FR.cellStr2ColumnRow(boxes[i].options.location).row;

//获取行号

var col = FR.cellStr2ColumnRow(_g().getWidgetByName("opdate").options.location).col;

//获取列号

var opvalue = _g().getCellValue(0, col, row);

var delvalue=boxes[i].getValue();

//alert(opvalue);

//如果控件大于1个,则遍历修改选中行当前列的值

oparr.push(opvalue);

delarr.push(delvalue);

}

}

} else {

if (boxes.getValue() == true) {

var row = FR.cellStr2ColumnRow(boxes.options.location).row;

//获取行号

var col = FR.cellStr2ColumnRow(_g().getWidgetByName("opdate").options.location).col;

//获取列号

var opvalue = _g().getCellValue(0, col, row);

//如果控件只有1个,则直接判断是否选中,选中的话修改当前列的值

var delvalue=boxes.getValue();

oparr.push(opvalue);

delarr.push(delvalue);

}

}

//根据条件让按钮是否可用

if (oparr.indexOf(datemax) > -1 || delarr==false || name.length==0) {

contentPane.getWidgetByName("del").setEnable(false);

} else {

contentPane.getWidgetByName("del").setEnable(true);

}

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

经过测试发现,这种现象会出现在个别记录里,并不是所有的,郁闷了,我是用姓名作为参数查询的,当发现前端日期不是最大时,不断点击查询后,又恢复正常了;对于异常的记录,通过ALERT查问题,发现数组个数老是变化,如果日期组成的数组个数不变的话,是没有问题的。

我通过参数过滤来的数据,对应的数组不固定吗??不知道有谁遇到过这个问题,测试了好久也没结果。。。但90%的记录测试是没问题的,有问题的记录还是少数,就更郁闷了

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

通过查询获取的时间组成的数组,其个数为何有时会变化呢。。

var op = _g().getWidgetsByName("opdate");

var num=op.length;

alert(num);

此时数组的个数num有时会变化,甚至会出现undefined

有谁能解释一下呢,在线等。。。。。。

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

image.png

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

chyou 发布于 2021-12-11 00:39 (编辑于 2021-12-14 21:00)
1min目标场景问卷 立即参与
回答问题
悬赏:4 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共2回答
最佳回答
0
chyouLv4见习互助
发布于2021-12-14 20:59(编辑于 2021-12-14 22:19)

经过还断查阅和测试,似想着是不是因为扩展后的控件值因不即时而变成了NULL,我就尝试着把值赋值给文本控件(不扩展的),将其组成数组取最大值,嘿嘿,结果成了,对结果进行不断刷新测试,不再有NULL而判断错误了。。

以下就是我要的结果,日期最新的记录不允许删除:

20211214101723.gif

最佳回答
0
技安Lv3见习互助
发布于2021-12-11 08:00

建议控制台调试一下,还有最后判断批量删除按钮是否可用时用到了name这个变量,这个name你贴的代码里没有声明

  • chyou chyou(提问者) name我是设置了姓名参数。。。。 测试发现根据姓名查询出来的记录,时间最大值判断错误的,只要反复点击查询后,又恢复正常了。。。现在再想,根据参数面板过滤出的数据,再根据日期组成的数组会动态变化吗。。。现在变化的原因就是时间数组有时不是过滤的实际个数,造成取最大值时不正确
    2021-12-12 11:48 
  • 1关注人数
  • 595浏览人数
  • 最后回答于:2021-12-14 22:19
    请选择关闭问题的原因
    确定 取消
    返回顶部