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

1

Я пытаюсь проверить, является ли число палиндромом в 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

  • 6
    У вас есть check и reverse определение в пределах palindrome , но вы никогда нигде не звоните.
  • 2
    Кроме того, palindrome() , похоже, не принимает никаких аргументов.
Показать ещё 3 комментария
Теги:
algorithm
palindrome

4 ответа

1
Лучший ответ

Как отмечается в комментариях, на самом деле все сводится к тому, чтобы не передавать значение в функцию 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('')

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

  • 0
    Не могли бы вы объяснить первую строку немного больше?
  • 1
    Первая строка второго примера?
Показать ещё 4 комментария
1

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

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));
  • 0
    @ Тайлер Моралес - если это ответило на ваш вопрос, пожалуйста, примите этот ответ.
1

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

  1. Преобразуйте параметр num в строку.
  2. Присвойте numString пустой строке.
  3. Вставьте каждый символ строки num строку numString.
  4. Проверьте, 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);
0

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

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));

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню