函数和if else语句不起作用

时间:2017-07-23 12:23:52

标签: javascript arrays function loops

我正在学习如何编码,而我现在正在使用CodeWars进行实践的基础知识。由于CodeWars允许您查看解决方案,因此我查看了一些指导,这很有帮助。我已经使用这个网站作为指导,但无法弄清楚为什么我的功能不起作用。它是用javascript编写的。它只输出[]。这是问题,代码和输出(按顺序如下):

问题

  

编写一个方法,它将获得一个整数数组作为参数,并将处理此数组中的每个数字。   返回一个新数组,处理每个输入数组的数字,如下所示:   如果数字具有整数平方根,请取此,否则将数字平方。   [4,3,9,7,2,1] - > [2,9,3,49,4,1]

CODE

function squareOrSquareRoot(array) {

    var newValues = []; // new array for new values

    for (i = 0; i < array.length; i++){ // for loop to look through the values

        var initial = array[i]; // extracting one value from the array to evaluate
        var sqrt = Math.sqrt(initial); // finding the square root of initial
        if (Number.isInteger(sqrt) == 'true'){ // determining if sqrt is an integer 
                                            // and if so .....
            newValues.push[sqrt];
        } // .... adding sqrt to the newValues array
        else if (Number.isInteger(sqrt) == 'false') { // determining if sqrt is not 
                                                      // an integer
            newValues.push[initial*initial];  // then multiplying initial by itself 
                                           //and adding to newValues
        }
    }
    return newArray; // returning newValues onto the screen
}

输出

Expected: '[2, 9, 3, 49, 4, 1]', instead got: '[]'

Expected: '[10, 10201, 25, 25, 1, 1]', instead got: '[]'

Expected: '[1, 4, 9, 2, 25, 36]', instead got: '[]'

3 个答案:

答案 0 :(得分:3)

你的病情有缺陷。变化

Number.isInteger(sqrt) == 'true'

Number.isInteger(sqrt) == true

Number.isInteger返回布尔值而不是字符串。另外第二个if是多余的,如果isInteger返回false则只执行else部分而不是再次检查。 最后,您需要返回newValues而不是newArray。希望它有所帮助。

答案 1 :(得分:-2)

更好的是不使用for循环,而array.map完全适用。

  function squareOrSquareRoot(array) {
    return array.map(function(int) {
      var sqrt = Math.sqrt(int);
      return Number.isInteger(sqrt) ? sqrt : int * int;
    })
  }

Array.map将每个项目映射到给定的函数,并在最后返回一个新数组。

答案 2 :(得分:-2)

你做错了很多事。

  1. 您没有返回正确的数组。您应该返回newValues而不是newArray
  2. 您不应使用truefalse
  3. 的引号
  4. 使用if / else if不是true / false。使用if / else而不是
  5. 这是工作解决方案:

    function squareOrSquareRoot(array) {
    
        var newValues = []; 
        for(var i = 0 ; i<array.length ;i++) {
            Number.isInteger(Math.sqrt(array[i]))?newValues.push(Math.sqrt(array[i])):newValues.push(array[i]*array[i]);
        }
        return newValues;
    }
    
    var a = [3,4,5,9,7,16,36,11];
    console.log('Input : ' + a);
    console.log('Output: ' + squareOrSquareRoot(a));
    
      

    输入:[3,4,5,9,7,16,36,11]

         

    产出:[9,2,25,3,49,4,6,121]

    如果这个三元表达式让你感到困惑,这里是if / else语句的例子:

    function squareOrSquareRoot(array) {
    
        var newValues = []; 
        for(var i = 0 ; i<array.length ;i++) {
            var initial = array[i];
            var sqrt = Math.sqrt(initial);
            if(Number.isInteger(sqrt)) 
                newValues.push(sqrt);
            else
                newValues.push(array[i]*array[i]);
        }
        return newValues;
    }
    
    var a = [3,4,5,9,7,16,36,11];
    console.log('Input : ' + a);
    console.log('Output: ' + squareOrSquareRoot(a));