Javascript 如何返回第二大值的变量

Javascript 如何返回第二大值的变量,javascript,Javascript,我想找到第二大值的变量。我可以正确地找到第二大数字,但我想找到变量而不是值。例如,我得到了4列,分别是A、B、C和D A、B、C、D 1 4 2 3 我希望函数返回我的第二个大数字是D,而不是3。 下面是我的代码 var myArray = [totL,totO,totG,totB]; function findSecondLargeNumber(arr) { var fLargeNum = 0; var sLargeNum = 0; var largename="";

我想找到第二大值的变量。我可以正确地找到第二大数字,但我想找到变量而不是值。例如,我得到了4列,分别是A、B、C和D

A、B、C、D

1 4 2 3

我希望函数返回我的第二个大数字是D,而不是3。 下面是我的代码

var myArray = [totL,totO,totG,totB];
function findSecondLargeNumber(arr)
{
    var fLargeNum = 0;
    var sLargeNum = 0;
    var largename="";
    var key;
    for(var i=0; i<arr.length; i++)
    {
        if(fLargeNum < arr[i])
        {
            sLargeNum = fLargeNum;
            fLargeNum = arr[i];
            key=i;
        }
        else if(sLargeNum < arr[i])
        {
            sLargeNum = arr[i];
            key=i;
        }
    }

    if(key==0 )
    {
        largename="A";

    }
    else if(key==1 )
    {
        largename="B";

    }

    else if(key==2 )
    {
        largename="C";

    }

    else if(key==3 )
    {
        largename="D";

    }

    return largename;

}
var myArray=[totL,totO,totG,totB];
函数findSecondLargeNumber(arr)
{
var=m=0;
var-sLargeNum=0;
var largename=“”;
var键;
对于(var i=0;i您从未在任何地方设置
key
,因此它不会等于这些值中的任何一个。在编辑时,您是,但设置的值是错误的。您需要记住找到最大值的位置,然后在将其向下移动到第二大值时将
key
设置为该值

但它可能比这简单得多,请参见注释(我使用了
sKey
而不是
key
,因为我们需要跟踪
fKey
):

//注意假设:值总是>0而不是NaN
var myArray=[23,42,51,12];//[totL,totO,totG,totB];
变量名称=[“L”、“O”、“G”、“B”];
函数findSecondLargeNumber(arr)
{
var fLargeNum=-无穷大;
var-sLargeNum=0;
var-fKey=-1;
var sKey=-1;
对于(变量i=0;i
您从未在任何地方设置
key
,因此它不会等于这些值中的任何一个。在编辑时,您是这样的,但设置的值是错误的。您需要记住在哪里找到了最大值,然后将
key
向下移动到第二大值时设置为该值

但它可能比这简单得多,请参见注释(我使用了
sKey
而不是
key
,因为我们需要跟踪
fKey
):

//注意假设:值总是>0而不是NaN
var myArray=[23,42,51,12];//[totL,totO,totG,totB];
变量名称=[“L”、“O”、“G”、“B”];
函数findSecondLargeNumber(arr)
{
var fLargeNum=-无穷大;
var-sLargeNum=0;
var-fKey=-1;
var sKey=-1;
对于(变量i=0;iconsole.log(findSecondLargeNumber(myArray));
我会采取完全不同的方法:

var列=['A','B','C','D'];
var myArray=[1,3,4,2];
函数findSecondLargeNumber(arr){
//将列名映射到输入数组值
var map=arr.map(函数(编号、索引){
返回{column:columns[index],值:number}
});
//按值对映射数组进行排序
map=map.sort(函数(a,b){
返回a.value-b.value;
});
//返回排序数组中第二个最后一个元素的列
返回映射[map.length-2]。列;
}

console.log(findSecondLargeNumber(myArray));
我会采取完全不同的方法:

var列=['A','B','C','D'];
var myArray=[1,3,4,2];
函数findSecondLargeNumber(arr){
//将列名映射到输入数组值
var map=arr.map(函数(编号、索引){
返回{column:columns[index],值:number}
});
//按值对映射数组进行排序
map=map.sort(函数(a,b){
返回a.value-b.value;
});
//返回排序数组中第二个最后一个元素的列
返回映射[map.length-2]。列;
}

console.log(findSecondLargeNumber(myArray));
“当我测试它时,这是不正确的,有人能告诉我错误吗?”你从来没有在任何地方设置过
键。我在fLargeNum=arr[I]之后设置它;和sLargeNum=arr[I];即使我已经设置了它,但仍然无法得到正确的答案。“我在fLargeNum=arr[I]和sLargeNum=arr[I]之后设置它。”当我发布评论时,该代码不在那里。是的,很抱歉,我已经编辑了,但仍然没有为我工作。我不知道问题出在哪里。“当我测试它时,这是错误的,有人能指出错误吗?”你从未在任何地方设置
键。我在fLargeNum=arr[I]和sLargeNum=arr[I]之后设置它;即使我已经设置好了,但仍然不能得到正确的答案。“我在fLargeNum=arr[I]和sLargeNum=arr[I]之后设置它。”当我发布评论时,该代码不在那里。是的,很抱歉,我已经编辑了,但仍然不为我工作。我不知道问题出在哪里。谢谢!但是如果我想要LOGB而不是ABCD呢?@初学者:这不是你问的问题。假设你知道数组的元素永远不会超过四个:
返回“LOGB”.charAt(sKey);
(或
返回[“L”、“O”、“G”、“B”];
)。@T.J.Crowder-How