代码适用于codeacademy的网站,但不适用于coderbyte

时间:2014-05-25 19:29:43

标签: javascript arrays compiler-errors

我在使用下面的代码时遇到了问题,而且非常令人沮丧。问题似乎不是代码本身:程序可以很好地找到数组中的第二个最大和最小数字,但到目前为止只在labs.codeacademy.com JavaScript环境中这样做。

我去Coderbyte.org输入正确的代码来传递挑战。首先,每当我输入时," input.sort(函数(a,b){return(a-b);});"在coderbyte.org的网站上,由于某种原因,它会从页面中间缩进块的其余部分。这让我觉得它可能是我问题的根源。

当我将代码从codeacademy剪切并粘贴到coderbyte.org的网站时,它会粘贴精细缩进,但它只会返回一个空白框而不是第二个最高和最低值。我的问题:为什么它在一个网站上运行,而在另一个网站上运行?我已经坚持了两天了:有人请帮帮我吗?

function SecondGreatestLow(arr) {  
    input.sort(function(a,b){return (a-b);});  
    var input = arr;  
    var hashObject = {}  

    for (var i = input.length - 1; i >= 0; i--) {
        var currentItem = input[i]; //WE LOOP THROUGH OUR NUMBER LIST

        if (hashObject[currentItem] === true) {
            input.splice(i, 1); //IF CURRENTITEM IS ALREADY IN HASHOBJECT, THEN DELETE THE COPY FOUND IN ARRAY AND MOVE ON TO NEXT NUMBER
        }

        hashObject[currentItem] = true; //IF CURRENTITEM IS NOT IN HASHOBJECT, ADD IT! THEN MOVE ON TO NEXT NUMBER.
    }
    //THE ARRAY HAS NOW BEEN "DE-DUPED":
    //NEXT WE OUTPUT THE MAX AND MIN VALUES ACCORDING TO ARRAY SIZE
    if (input.length >= 4) { //If 4+ chars, then remove the first two values to access the second by default
        input.pop(); 
        input.shift();
        var min = Math.min.apply(null,input),
        max = Math.max.apply(null,input);
        return (max + " " + min);
    } else {
        var min2 = Math.min.apply(null,input), 
        max2 = Math.max.apply(null,input);
        return max2 + " " + min2;
    }
}

//example:   
console.log(SecondGreatestLow(arr));  
// THE OUTPUT ON CODEACADEMY IS AS FOLLOWS:  
// arr = [ 1, 5, 10, 1, 25, 1, 5, 5, 5, 40, 5, 1, 100 ]; -> 40 5  
// arr = [ 4, 90 ]; -> 90 4  

1 个答案:

答案 0 :(得分:0)

两件事:

  • 您在尝试对其进行排序后定义input
  • 如果你想要输出一些东西,你必须在数组上实际调用你的函数(我假设你这样做了,但是你会忘记有多少人会忘记;另外,一些编辑会告诉你返回的内容以及其他人需要你可以把它输出到某个地方,因为从本质上讲,你在调用一个函数而不用它做任何事情; CCLabs很好,因为它显示了每个函数调用的返回值。)

enter image description here