JavaScript 函数不适用于数组中的 0 值

发布于 2024-11-14 08:21:51 字数 2492 浏览 2 评论 0原文

此函数旨在查找变量列表中最高的变量,该变量具有五个 id 字母和一个数字。它适用于所有其他插槽,2、3、4、5、6、7、8、9、10,但不适用于 1。我需要另一双眼睛在这里。

getVer 函数从 id 中获取数字;因此带有 getVer 的 ImpHt1 将为 1,而 getShtNm 则为 ImpHt。

function find_max_feat(array_input,ShtNm) {
    if (String(array_input[0]).length == 1) {
        var max = 0;
    }
    else {
        var max = getVer(array_input[0]);
    }
    var maxver = 0
    var len = array_input.length;
    for (var i = 0; i < len; i++) {
        if (String(array_input[i]).length > 1) {
            if (getShtNm(String(array_input[i])) == ShtNm) {
                if (getVer(String(array_input[i])) > maxver) {
                    var max = array_input[i];
                    var maxver = getVer(String(array_input[i]));
                }
            }
        }
    }
    return max;
}

0,DmnHt1_0,AltFm1_,0,0,0,0,0,0,0

数组的示例,这就是需要 getVer 的原因。

需要明确的是,这是针对工作表生成器的,但我已经在整个事情上工作了至少几天,甚至可能工作一周或几周。

上面的数组是在每次选择专长时生成的,find_max_feat 数组用于查找组中的最高版本;它的运行是无限循环的,因为我所做的任何其他事情都无法让它按照我想要的方式工作。

function checkFeats() {
    updateFeatsel();
    t=setTimeout("checkFeats()",1000);
}

function updateFeatsel() {
    curselarray = new Array();
    var selinc = 1;
    while (selinc <= 10) {
        var selincar = selinc - 1;
        var selid = document.getElementById(String('ftlst' + selinc));
        if (getVer(selid.options[selid.selectedIndex].title)) {
                curselarray[selincar] = selid.options[selid.selectedIndex].title;
        }
        else {
            curselarray[selincar] = 0;
        }
        selinc++;
    }
    document.getElementById('debug1').innerHTML = curselarray.valueOf();
    featSelch('hlthm','ImpHt',healthom);
    featSelch('strdmgm','ImpPd',Strpdom);
    featSelch('strwhtm','ImpLi',Strwhtom);
    featSelch('strsltm','EnhIt',StrSltom);
    featSelch('endsurm','ImpEn',EndSurom);
    featSelch('endsokm','ImpDf',EndSokom);
    featSelch('intelmpm','ImpMg',Intelmom);
    featSelch('willsokm','ImpMs',Willsokom);
    featSelch('luckrllm','ImpLu',Lukrllom);
    featSelch('luckpntm','EnhLu',Lukpntom);
    featSelch('hlthbn','DmnHt',0);
    featSelch('strbn','SupSt',0);
    featSelch('luckbn','DmnLu',0);
    featSelch('endbn','Armor',0)
    document.getElementById('debug2').innerHTML = find_max_feat(curselarray,'DmnHt');
    updateAmounts();
}

function featSelch(sid,fshtnm,defval) {
    return document.getElementById(sid).innerHTML = getFeatvalue(fshtnm,defval);
}

This function is meant to find the highest variable in a list of variables, which have five id letters, and one number. It works fine with all the other slots, 2, 3, 4, 5, 6, 7, 8, 9, 10, but not 1. I need another set of eyes here.

The getVer function takes the number from the id; so ImpHt1 with getVer would be 1, while getShtNm gets ImpHt.

function find_max_feat(array_input,ShtNm) {
    if (String(array_input[0]).length == 1) {
        var max = 0;
    }
    else {
        var max = getVer(array_input[0]);
    }
    var maxver = 0
    var len = array_input.length;
    for (var i = 0; i < len; i++) {
        if (String(array_input[i]).length > 1) {
            if (getShtNm(String(array_input[i])) == ShtNm) {
                if (getVer(String(array_input[i])) > maxver) {
                    var max = array_input[i];
                    var maxver = getVer(String(array_input[i]));
                }
            }
        }
    }
    return max;
}

0,DmnHt1_0,AltFm1_,0,0,0,0,0,0,0

An example of the array, which is why getVer is needed.

This is for a sheet generator, to be clear, but I've been working on the entire thing for at least a few days now, maybe even a week or weeks of on and off work.

The array above is generated any time a feat is selected, and the find_max_feat array is used to find the highest version in a group; it operates off of an infinite loop since nothing else I did could get it to work the way I wanted it to.

function checkFeats() {
    updateFeatsel();
    t=setTimeout("checkFeats()",1000);
}

function updateFeatsel() {
    curselarray = new Array();
    var selinc = 1;
    while (selinc <= 10) {
        var selincar = selinc - 1;
        var selid = document.getElementById(String('ftlst' + selinc));
        if (getVer(selid.options[selid.selectedIndex].title)) {
                curselarray[selincar] = selid.options[selid.selectedIndex].title;
        }
        else {
            curselarray[selincar] = 0;
        }
        selinc++;
    }
    document.getElementById('debug1').innerHTML = curselarray.valueOf();
    featSelch('hlthm','ImpHt',healthom);
    featSelch('strdmgm','ImpPd',Strpdom);
    featSelch('strwhtm','ImpLi',Strwhtom);
    featSelch('strsltm','EnhIt',StrSltom);
    featSelch('endsurm','ImpEn',EndSurom);
    featSelch('endsokm','ImpDf',EndSokom);
    featSelch('intelmpm','ImpMg',Intelmom);
    featSelch('willsokm','ImpMs',Willsokom);
    featSelch('luckrllm','ImpLu',Lukrllom);
    featSelch('luckpntm','EnhLu',Lukpntom);
    featSelch('hlthbn','DmnHt',0);
    featSelch('strbn','SupSt',0);
    featSelch('luckbn','DmnLu',0);
    featSelch('endbn','Armor',0)
    document.getElementById('debug2').innerHTML = find_max_feat(curselarray,'DmnHt');
    updateAmounts();
}

function featSelch(sid,fshtnm,defval) {
    return document.getElementById(sid).innerHTML = getFeatvalue(fshtnm,defval);
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

半透明的墙 2024-11-21 08:21:51

这是因为您使用 getVer(array_input[0]) 而不是 array_input[0] 初始化 max。如果第一项是最高的并且版本号为零,则使用初始值。

将其更改

var max = getVer(array_input[0]);

为:

var max = array_input[0];

That is because you are initialising max using getVer(array_input[0]) instead of array_input[0]. If the first item is the highest and has the version number zero, the initial value is used.

Change this:

var max = getVer(array_input[0]);

into:

var max = array_input[0];
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文