具有相等值的数组上的Math.max方法

时间:2015-06-04 03:42:10

标签: javascript arrays math

我正在处理一些coderbyte代码,并注意到当我尝试获取具有相等值undefined的数组中的max项时,会返回。记录最小值时记录为80而不是undefined。这是为什么?

更新代码:

function noRepeat(arr) {
    tmp = []
    if (arr.length === 2 && arr[0] === arr[1]) {
        return arr;
    }
    for (var i = 0;i<arr.length;i++) {
        if (tmp.indexOf(arr[i]) === -1) {
            tmp.push(arr[i])
        }
    }
    return tmp
}
function SecondGreatLow(arr) {
    arr = noRepeat(arr).sort(function (a,b) {return a-b;});
    var low = arr[arr.indexOf(Math.min.apply(Math,arr))+1];
    console.log("low",low);
    var high = arr[arr.indexOf(Math.max.apply(Math,arr))-1];
    console.log("high",high);
    return low +" "+high;
}
console.log(SecondGreatLow([80,80]));

输出:

"low" 80 
"high" undefined
"80 undefined"

1 个答案:

答案 0 :(得分:1)

实际上,那是好的。您想如何在两个相似的数字的数组中找到第二个最大\最小的数字? 它应输出“无解决方案”或其他内容。就像没有空数组的解决方案一样。

function SecondGreatLow(arr) 
{
    arr = noRepeat(arr).sort(function (a,b) {return a-b;});
    if (arr.length < 2)
        return "No solution";
    console.log("low ", arr[1]);
    console.log("high ", arr[arr.length - 2]);
    return low + " " + high;
}

您不需要Math min和max函数,因为您的数组已排序且值是唯一的。你需要从开头拿第二个,从结尾拿第二个。

此外,您不需要此部分,因为它是按算法计算的。

if (arr.length === 2) 
{
    return arr[1] + " " + arr[0];
}

例如,你有一个数组[1,1,2] 你删除重复并获得[1,2] 现在你的算法返回low = arr [1] = 2而high = arr [2 - 2] = arr [0] = 1。 答案是正确的 - 2是第二个最小数字,1是第二个最小数字。