在javascript中分别对数字的每个数字进行平方

时间:2019-04-05 21:53:48

标签: javascript

我想知道我的代码出了什么问题,它总是返回输入数字的每个数字的数组,但不返回我希望的平方结果。 这是代码:

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
  }
}

3 个答案:

答案 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));