【问题标题】:Javascript Algorithm Attempting to Implement Call Back Function尝试实现回调函数的 Javascript 算法
【发布时间】:2020-10-09 19:01:38
【问题描述】:

问题

自恋数字是一个数字,它是它自己的数字的总和,每个数字都是给定基数的数字的幂。在这个 Kata 中,我们将自己限制为十进制(以 10 为底)。

例如取153(3位数):

1^3 + 5^3 + 3^3 = 1 + 125 + 27 = 153

和 1634(4 位):

1^4 + 6^4 + 3^4 + 4^4 = 1 + 1296 + 81 + 256 = 1634

挑战:

您的代码必须返回真或假,具体取决于给定数字是否为以 10 为底的自恋数字。

不需要对文本字符串或其他无效输入进行错误检查,只会将有效整数传递给函数。

我的代码

function narcissistic(value) {
 
    let valString = value.toString().split('');
 
    let integerSet = valString.map((item)=>{
     return Number(item);
    })
   
    let keyFunc = function powerCalc(test){
      let a = test[test.length-1];
      return test.map((item)=>{
        return Math.pow(item, a);
      }).reduce((total, item)=>{
        return total + item;
      }, 0);
    }

    console.log(keyFunc(153));

    if(keyFunc(integerSet)==value){
       return true;
     }
    else {
       return false;
     }
}


console.log(narcissistic(12432));
console.log(narcissistic(153));

问题

我的控制台说 test.map 不是一个函数。

如何调整该功能以使其正常工作?

【问题讨论】:

  • testpowerCalc/keyFunc的参数。您正在记录 keyFunc(153)153 显然不是一个数组 -> 删除 console.log(keyFunc(153)) 或将 153 包装在一个数组中
  • 赞赏 :) 我在测试时遇到这些错误,有什么想法吗?自恋函数应该发现小数字都是自恋的 7 是自恋的 - 预期:真,而不是:假 在 1 毫秒内完成应该发现这些数字是自恋的 371 是自恋的 - 预期:真,而不是:假

标签: javascript algorithm


【解决方案1】:

两个小错误:

function narcissistic(value) {
 
    let valString = value.toString().split('');
 
    let integerSet = valString.map((item)=>{
     return Number(item);
    })
   
    let keyFunc = function powerCalc(test){
      let a = test.length;  // <------- "raised to the power of the number of digits"
      return test.map((item)=>{
        return Math.pow(item, a);
      }).reduce((total, item)=>{
        return total + item;
      }, 0);
    }

    // console.log(keyFunc(153)); // <-- This was throwing an error

    if(keyFunc(integerSet)==value){
       return true;
     }
    else {
       return false;
     }
}

console.log(narcissistic(12432));// false
console.log(narcissistic(153));  // true
console.log(narcissistic(371));  // true
console.log(narcissistic(7));    // true

还有一点重写:

function narcissistic(value) {
    const integerSet = value.toString().split('').map(Number);
    const pow = integerSet.length;
    
    const sum = integerSet.reduce((total, item) => total + Math.pow(item, pow), 0);

    return sum == value;
}

console.log(narcissistic(12432));// false
console.log(narcissistic(153));  // true
console.log(narcissistic(371));  // true
console.log(narcissistic(7));    // true

【讨论】:

  • 谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-26
  • 2014-02-04
相关资源
最近更新 更多