【问题标题】:Cannot chain .join() method onto Math.pow to change array back to integers无法将 .join() 方法链接到 Math.pow 以将数组更改回整数
【发布时间】:2021-03-06 02:17:01
【问题描述】:

您好,我正在练习代码大战 kata,但我不明白为什么我不能将 .join 链接到 Math.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

【问题讨论】:

  • Math.pow() 返回一个数字。 .join("") 必须在 .map() 的结果上调用 -> .map((num) => /*...*/).join("")
  • 那么我需要将.map 存储在变量中吗?然后在变量上调用.join?我试过了,还是不行,我再试一次@Andreas

标签: javascript arrays methods scope


【解决方案1】:

正如@Andreas 在 cmets 中指出的那样,您需要将Array.join 应用于Array.map 的结果,而不是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));

【讨论】:

  • 感谢您的解释。我没有意识到我必须将它作为我在您的console.log 中看到的箭头函数来执行它返回一个数字但是当我在 kata 终端中运行我的代码时,它返回 '811181' 作为字符串,我现在需要看看我在哪里把这个函数转换回一个数字! :)
  • 实际上,当我在终端中运行它时,我得到了一个数字,它一定是导致错误Expected: 811181, instead got: '811181' 的 codeWars 终端,这就是我所看到的......@Nick
  • 抱歉,不清楚您是否必须返回一个数字,您可以将所有代码包装在一个数字中。注意没有必要使用箭头函数,我只是觉得它们更容易阅读。
  • 好的,谢谢,我会这样做的。是的,我发现你的代码也更容易阅读!
【解决方案2】:

这就是答案

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

【讨论】:

  • @ubaidah 好的,所以你建议不要使用Math.pow。我看到您已将整个内容包装在 Number 中,因此它返回一个数字,然后您拆分传入的参数并对其进行映射。我不知道您可以使用 .map 遍历字符串
  • 好的,我刚刚找到这篇文章,它解释了.split 将字符串解析为array...你每天都会学到新东西:quora.com/…
  • 您的答案几乎是正确的,但是如果您在此处删除 join 并在返回这样的数组时放置它,则您正尝试在数字上附加 join ``` function squareDigits(num){ const convertNumToArray = Array.from(String(num)); return convertNumToArray.map((num) => { return Math.pow(num,2) }).join("") } ```
  • 我明白了,所以我离得不远了。我看到你的代码更干净了。我还必须将上述内容包装在“数字”中,以便它返回一个数字 - 谢谢!!!
  • codewars 是练习和提高技能的好地方。谢谢
猜你喜欢
  • 2013-12-07
  • 1970-01-01
  • 2018-04-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多