Как вернуть значения из функций в другие функции - PullRequest
0 голосов
/ 10 января 2019

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

0 голосов
/ 11 января 2019

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

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

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

0 голосов
/ 11 января 2019

Вам не нужны две функции для этого. Для проверки палиндромов достаточно одной функции 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);
0 голосов
/ 11 января 2019

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

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

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