首页 > 解决方案 > 无法将 .join() 方法链接到 Math.pow 以将数组更改回整数

问题描述

您好,我正在练习代码大战 kata,但我不明白为什么我不能链接.joinMath.pow.

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

欢迎。在这个 kata 中,您被要求对数字的每个数字求平方并将它们连接起来。例如,如果我们通过函数运行 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

标签: javascriptarraysmethodsscope

解决方案


正如@Andreas 在评论中指出的那样,您需要将Array.join结果应用于不返回数组的Array.map, not 。Math.pow使用 ES6 箭头函数,您可以在一行中编写:

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

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


推荐阅读