Javascript Попытка алгоритма реализовать функцию обратного вызова - PullRequest
0 голосов
/ 19 июня 2020

Вопрос

Нарцисс c Число - это число, которое представляет собой сумму собственных цифр, каждая из которых возведена в степень числа цифр в заданном основании. В этом Ката мы ограничимся десятичным числом (основание 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

Задача:

Ваш код должен возвращать истину или ложь в зависимости от того, является ли данное число числом Нарциссов c в базе 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 не является функцией.

Как можно Я настраиваю эту функцию, чтобы она работала?

1 Ответ

1 голос
/ 19 июня 2020

Две маленькие ошибки:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...