0

Given a number, write a function to output its reverse digits. (e.g. given 123 the answer is 321)

Numbers should preserve their sign; i.e. a negative number should still be negative when reversed.

This was my solution:

function reverseNumber(n) {
  var split = (""+n).split("");
  var reverse = split.reverse();
  var last = reverse.join('');
  if(reverse[reverse.length - 1] == '-') {
    var almost = reverse.pop();
    var close = reverse.unshift(almost);
    var last2 = reverse.join('');
    var rev = Number(last2);
    return rev;
  } else {
    var pos = Number(last);
    return pos;
  }
}

It's too long. I'm wondering if anybody can come up with a shorter solution.

3 Answers3

0

var numRev2 = function(n) {
  return n >= 0
      ? n.toString().split('').reverse().join('')
      : '-' + n.toString().substring(1).split('').reverse().join('');
}
//ES6
var numRev = n =>
    n > 0   ? n.toString().split('').reverse().join('')
            : '-' + n.toString().substring(1).split('').reverse().join('');

console.log ( numRev(743823) );
console.log ( numRev(-743823) );

console.log ( numRev2(743823) );
console.log ( numRev2(-743823) );
Jarek Kulikowski
  • 1,399
  • 8
  • 9
0

You can use .reduceRight(), .join(), + operator

+((...props) => props.reduceRight((a, b) => a.concat(b), []))(1,2,3).join("")
guest271314
  • 1
  • 15
  • 104
  • 177
  • *"Given a number"* - but "1,2,3" is not a number... And given that `props` is an array, that `.reduceRight()` can be replaced by `.reverse()`. – nnnnnn Aug 11 '17 at 02:50
  • @nnnnnn `1,2,3` is one way to pass N parameters or `123`. The pattern can also be composed to accept an array. Yes, `.reverse()` can also be utilized. – guest271314 Aug 11 '17 at 02:55
  • @nnnnnn `let n1 = 123; let n2 = [4,5,6]; let rev = N => +((...props) => (props.length === 1 && typeof props[0] === "number" ? [...String(props.pop())] : props.pop()) .reduceRight((a, b) => a.concat(b), []))(N).join(""); console.log(rev(n1), rev(n2));` – guest271314 Aug 11 '17 at 03:00
0

Some useful information is available at How do you reverse a string in place in JavaScript?

Since this has devolved to code golf, another answer won't hurt.

function revNum(n) {
  return (n<0? -1 : 1) * ('' + Math.abs(n)).split('').reverse().join('');
}

[-12.3, 345.23, -0.765, 1.23e5].forEach(n=>console.log(n + ' : ' + revNum(n)));
RobG
  • 142,382
  • 31
  • 172
  • 209