我正在学习如何编码,而我现在正在使用CodeWars进行实践的基础知识。由于CodeWars允许您查看解决方案,因此我查看了一些指导,这很有帮助。我已经使用这个网站作为指导,但无法弄清楚为什么我的功能不起作用。它是用javascript编写的。它只输出[]。这是问题,代码和输出(按顺序如下):
编写一个方法,它将获得一个整数数组作为参数,并将处理此数组中的每个数字。 返回一个新数组,处理每个输入数组的数字,如下所示: 如果数字具有整数平方根,请取此,否则将数字平方。 [4,3,9,7,2,1] - > [2,9,3,49,4,1]
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: '[]'
答案 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)
你做错了很多事。
newValues
而不是newArray
。true
或false
这是工作解决方案:
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));