我想知道我的代码出了什么问题,它总是返回输入数字的每个数字的数组,但不返回我希望的平方结果。 这是代码:
function squareDigits(num) {
if (num >= 10) {
let digits = num.toString().split('');
let realDigits = digits.map(Number);
realDigits.forEach(number => {
return number * number
});
return realDigits;
} else {
return num * num
}
}
答案 0 :(得分:2)
您的主要问题是您没有在数组上保存forEach()
方法中数字的平方。只需对您的代码进行简单的修改即可:
function squareDigits(num)
{
if (num >= 10)
{
let digits = num.toString().split('');
let realDigits = digits.map(Number);
realDigits.forEach((number, idx) => realDigits[idx] = number * number);
return realDigits;
}
else
{
return num * num;
}
}
console.log(squareDigits(3));
console.log(squareDigits(33));
.as-console {background-color:black !important; color:lime;}
.as-console-wrapper {max-height:100% !important; top:0;}
但是,您可以使用唯一的map()
(对于数字coercion,在使用乘法运算符时会生效)进行相同处理:
function squareDigits(num)
{
if (num >= 10)
{
let digits = num.toString().split('');
return digits.map(n => n * n);
}
else
{
return num * num;
}
}
console.log(squareDigits(3));
console.log(squareDigits(33));
.as-console {background-color:black !important; color:lime;}
.as-console-wrapper {max-height:100% !important; top:0;}
答案 1 :(得分:1)
这里的问题是,从forEach返回不会修改原始数组。尝试将.map与新的输出变量一起使用,例如:
function squareDigits(num) {
if (num >= 10) {
let digits = num.toString().split('');
let realDigits = digits.map(Number);
let squaredDigits = realDigits.map(number => {
return number * number
});
return squaredDigits;
} else {
return num * num
}
}
答案 2 :(得分:0)
squareDigits = num => {
if (num >= 10) {
return num.toString().split('').map(n => {
n = Number(n) || 0;
return n * n;
});
} else {
return num * num
}
}
console.log(squareDigits(3));
console.log(squareDigits(12123));