无法将 .join() 方法链接到 Math.pow 以将数组改回整数

Cannot chain .join() method onto Math.pow to change array back to integers

你好,我正在练习代码战争套路,我不明白为什么我不能将 .join 链接到 Math.pow

说明如下: https://www.codewars.com/kata/546e2562b03326a88e000020/train/javascript

欢迎光临。在这个型中,要求您对数字的每个数字进行平方并将它们连接起来。 比如我们通过函数运行9119,就会出来811181,因为92就是81,12就是1。

这是我的代码: 我已将传入的数字转换为数组,因此我可以使用 .map 对其进行迭代并对每个元素进行平方。然后我想将我的地图结果重新组合在一起,但它不起作用...

function squareDigits(num){  
  const convertNumToArray = Array.from(String(num));
  return convertNumToArray.map((num) => {
  return Math.pow(num,2).join("")    
  })
}

这里是测试用例:

Test.assertEquals(squareDigits(9119), 811181);

这里是错误:

TypeError: Math.pow(...).join is not a function
    at convertNumToArray.map
    at Array.map
    at squareDigits
    at /home/codewarrior/index.js:21:23
    at /home/codewarrior/index.js:23:5
    at Object.handleError

答案在这里

function squareDigits(num){
  return Number(String(num).split('').map((c)=>c*c).join(''))
}

正如@Andreas 在评论中指出的那样,您需要应用 Array.join to the result of Array.map,而不是 Math.pow,这不是 return 数组。使用 ES6 箭头函数,您可以将其写在一行中:

const squareDigits = (num) =>
  Array
  .from(String(num))
  .map((digit) => Math.pow(digit, 2))
  .join('');

console.log(squareDigits(9119));
console.log(squareDigits(573));