Почему эта функция обратного стека возвращает неопределенный результат вместо ожидаемого результата? - PullRequest
0 голосов
/ 21 июня 2019

Выход не определен. Я не могу увидеть, что не так с кодом, это, вероятно, что-то маленькое .. любая помощь? Вход 123, ожидаемый выход 321.

var reverse = function(x) {
  var stack = [];
  var number;
  for (var i = 0; i < x.length; i++) {
    stack.push(x);
  }

  while (stack.length > 0) {
    number += stack.pop();
  }

  return number;
};

console.log(reverse(123));

Ответы [ 2 ]

0 голосов
/ 21 июня 2019

Использование оператора распространения ... для разделения строки (в данном случае эквивалентно s.split('')). reverse массив и затем объединить, используя join('').

const reverse = (s) => {
  let isNumber = typeof s === 'number'
  if (isNumber) s += ''; // Convert to string
  
  let result = [...s].reverse().join('');
  
  return isNumber ? parseInt(result) : result;
}

console.log(reverse(123));

РЕДАКТИРОВАТЬ: обрабатывает числа и строки

0 голосов
/ 21 июня 2019

Вы делаете три ошибки:

  • Сначала вам нужно преобразовать число в строку.
  • Вторая ошибка: вы нажимаете x целое число до stackнажмите на символ с этим индексом.
  • Вам необходимо изначально установить number на '', а не undefined

var reverse = function(x) {
  x = String(x)
  var stack=[];
  var number = '';
  for(var i =0;i<x.length;i++){
    stack.push(x[i])
  }

  while(stack.length >0){
    number += stack.pop();
  }
  return +number;
};

console.log(reverse(123)) 

Я думаю, что лучше преобразовать число в массив строк, а затем перебрать половину массива, чтобы обратить его.И в конце концов используйте join()

var reverse = function(x) {
  x = String(x).split('');
  for(let i = 0;i<Math.floor(x.length/2);i++){
    let temp = x[i];
    x[i] = x[x.length - i - 1];
    x[x.length - i - 1] = temp;
  }
  return x.join('')
 
};

console.log(reverse(123))

Приведенный выше код лучше всего подходит, если вы не хотите использовать reverse()reverse() вы можете сделать однострочник

var reverse = x => +String(x).split('').reverse().join('')
console.log(reverse(123))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...