Как вернуть значения из функций в другие функции

Я пытаюсь проверить, является ли число палиндромом в Javascript

Я преобразовал число в строку, перевернул его и сохранил как новую переменную: reverseNum. Тем не менее, когда я иду, чтобы проверить, если num == reverseNum Я не могу заставить логику работать должным образом

function palindrome() {
    function reverse(num) {
        num = num.toString();
        let reverseNum = [];
        for (let i = 1; i <= num.length; i++) {
            reverseNum.push(num[num.length - i]);

        }
        return reverseNum.join('');
    }

    function check(num, reverseNum) {
        //is palindrome
        if (num == reverseNum) {
            return true;
            //is not palindrome
        } else {
            return false;
        }
    }
}

console.log(palindrome(121));

ожидаемый результат должен быть истинным, если, например, input: 121, output: 121

ожидаемый результат должен быть ложным, если, например, input: 79, output: 97

4 ответа

Решение

Как показывают комментарии, это действительно сводится к тому, чтобы не передавать значение в функцию palindrome а потом ничего не возвращать с него. Таким образом, это довольно быстрое решение:

function palindrome(number) {
    function reverse(num) {
        num = num.toString();
        let reverseNum = [];
        for (let i = 1; i <= num.length; i++) {
            reverseNum.push(num[num.length - i]);

        }
        return reverseNum.join('');
    }

    function check(num, reverseNum) {
        //is palindrome
        if (num == reverseNum) {
            return true;
            //is not palindrome
        } else {
            return false;
        }
    }
    
    return check(number, reverse(number))
}

console.log(palindrome(1211));

Это может быть сделано с помощью немного меньшего количества кода, путем преобразования числа в массив, обращения и проверки его:

const palindrome = number => `${number}` === `${number}`
    .split('')
    .reverse()
    .join('')

console.log(palindrome(121))
console.log(palindrome(1211))


Изменить Чтобы объяснить дальше, как требуется.

Я действительно думал о преобразовании этого в стандартные функции, чтобы попытаться сделать это немного более понятным, но я думаю, что было бы лучше объяснить, что происходит.

${number} просто преобразует наш номер в строку. Мы хотим сделать это, чтобы нам было проще преобразовать его в массив.

Мы хотим преобразовать его в массив, потому что массивы имеют reverse метод, который как раз то, что нам нужно. Итак, чтобы получить обратный массив, мы можем использовать:

`${number}`
    .split('')
    .reverse()

Итак, теперь у нас есть массив, в котором символы нашего числа обращены. Теперь нам нужно привести это в форму, которую мы можем использовать для сравнения с исходным числом. Чтобы сделать это, мы можем вернуть его обратно в строку, используя join(), Теперь у нас есть обратная строка с начальным номером. Теперь нам просто нужно сравнить это с начальным числом, чтобы увидеть, есть ли у нас палиндром.

Поскольку сравнивать число со строкой не совсем идеально, нам нужно преобразовать один из них. В моем примере я преобразовал начальное число в строку, используя ${number},

Синтаксис стрелки - это просто сокращение для стандартной функции (хотя есть и другие отличия, которые пока не актуальны).

Поскольку используемые нами методы принимают массив и возвращают массив, мы можем связать их вместе, чтобы сделать код красивым и простым.

В итоге:

// convert our numbers to strings
`${number}` === `${number}`

    // split the string into an array
    .split('')

    // reverse the array
    .reverse()

    // convert the array back to a string
    .join('')

Если у вас есть конкретные вопросы, просто дайте мне знать!

Я создал отдельные функции. Надеюсь, это поможет.

function reverse(num) {
    num = num.toString();
    var reverseNum = [];
    for (var i = 1; i <= num.length; i++) {
        reverseNum.push(num[num.length - i]);

    }
    return reverseNum.join('');
}

function palindrome(num) {
 var reverseNum = parseInt(reverse(num));

 console.log("Num:", num);
 console.log("Reverse Num:", reverseNum);
 
 if (num === reverseNum)
  return true;
    //is not palindrome
 else
  return false;
}

console.log(palindrome(121));

Вам не нужны две функции для этого. Просто одна функция palindrome() достаточно проверить на палиндромы.

  1. Преобразовать параметр num в строку.
  2. приписывать numString в пустую строку.
  3. Толкать каждого персонажа num строка в numString строка.
  4. Проверьте, если новая строка numString такой же, как начальный num строка.

function palindrome(num) {
  num = num.toString();
  let reverseNum = "";
  for(i = 1; i <= num.length; i++) {
    reverseNum += num.charAt(num.length - i);
  }  
  
  if (num == reverseNum) {
    console.log(num + " is a Palindrome!!");
    return true;
  } else {
    console.log(num + " is not a Palindrome!!");
    return false;
  }
  
}

palindrome(224);
palindrome(424);
palindrome(222);
palindrome(363);

Это будет делать

function palindrome(num) {


        num = num.toString();
        let reverseNum = [];
        for (let i = 1; i <= num.length; i++) {
            reverseNum.push(num[num.length - i]);

        }
        var e=reverseNum.join('')
        alert(e)
        return check(num,e);

    }

    function check(num, reverseNum) {

        //is palindrome
        if (num == reverseNum) {
            return true;
            //is not palindrome
        } else {
            return false;
        }

}

alert(palindrome(121));

Вы не вернули функцию проверки, и в ваших областях действия есть ошибка.

Другие вопросы по тегам