Как вернуть значения из функций в другие функции
Я пытаюсь проверить, является ли число палиндромом в 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()
достаточно проверить на палиндромы.
- Преобразовать параметр
num
в строку. - приписывать
numString
в пустую строку. - Толкать каждого персонажа
num
строка вnumString
строка. - Проверьте, если новая строка
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));
Вы не вернули функцию проверки, и в ваших областях действия есть ошибка.