将数字转换为反转的数字数组

Convert number to a reversed array of digits

我开发了这个代码笔 (http://codepen.io/PiotrBerebecki/pen/qZjojV?editors=0010) 试图解决以下 JavaScript 问题:

给定一个非负整数,return 一个包含倒序独立数字列表的数组。 例子: 348597 => 正确的解应该是 [7,9,5,8,4,3]

下面的函数显然不正确,因为它 returns ["7", "9", "5", "8", "4", "3"] - 正确的顺序但有引号.我如何修改它,使其 returns [7,9,5,8,4,3]?

function digitize(n) {
  var initialArray = (""+n).split('');
  var reversedArray = [];
  for (var i = initialArray.length - 1; i >= 0; i--) {
    reversedArray[i] = initialArray.shift();
  }
  return reversedArray;
}

添加 parseInt 以将字符串转换为数字,因为拆分时会将每个整数都转换为字符串

function digitize(n) {
  var initialArray = (""+n).split('');
  var reversedArray = [];
  for (var i = initialArray.length - 1; i >= 0; i--) {
    reversedArray[i] = parseInt(initialArray.shift(),10);
  }
  return reversedArray;
}

console.log(digitize(348597));

"One-line"解法:

var num = 348597,
    arr = String(num).split("").reverse().map(Number);

console.log(arr);  // [7, 9, 5, 8, 4, 3]
  • String(num)String 全局对象充当字符串的构造函数,"converts" 将给定的数字转换为字符串(在此例)

  • Array.reverse(): 方法原地反转数组

  • Array.map(): 方法创建并returns一个新数组,在每个数组元素上调用提供的函数

只是拆分和反转

var num = 348597,
    arr = num.toString().split("").reverse().map(Number);

document.write('<pre>' + JSON.stringify(arr, 0, 4) + '</pre>');

更好的是,将其减少为两行:

function digitize(num) {
    return num.toString().split('').reverse().map(Number);
}

最后的 map 调用将一个函数应用于数组中的每个元素(在本例中,该函数将字符串转换为对象)- 其他一切只是将数字转换为字符串,将字符串拆分为一个数组并将其反转。

传统上,parseInt 会在 map 调用中使用,但这会导致 strange behaviour.

如果您关心性能,这里是一个。

var num = 348597;
var digits = num + '';
var result = [];
for (var i = 0, length = digits.length; i < length; i++) {
  result[length - 1 - i] = +digits[i];
}

console.log(result);

对于可能希望看到有关如何通过简单的英语解决此问题的清晰格式的初学者,这可能有助于理解它:

function reverseNumber(num){
    num = num + '';
        let reversedText = num.split('').reverse().join('');
        let reversedNumber = parseInt(reversedText, 10);
    console.log("reversed number: ", reversedNumber);
        return reversedNumber;
  }

console.log(reverseNumber(12345));

它是您可以看到的许多其他解决方案的简化版本,以深入了解其工作原理。

function digitize(n) {
    let correctArr = [];
    let arrOfNumbers = n.toString().split('');
    let arrOfNumbersLength = arrOfNumbers.length;
    for (let i = 0; i < arrOfNumbersLength; i++) {
        let x = arrOfNumbers.pop();
        correctArr.push(+x);
    }
    return correctArr;
}
console.log(digitize(348597));

下面是解决此问题的更简单方法。

function digitize(n) {
    numbers = n.toString()//convert n to a string
    arrayNum = numbers.split('') //split the string and make an array
    arrayRev =arrayNum.reverse()//reverse the new array made.
    newArr = arrayRev.map(Number) // The Number constructor contains constants and methods for working with numbers. Values of other types can be converted to numbers using the Number() function.
    return newArr;
  }


  Refactored

  function digitize(n) {
   
    return n.toString().split('').reverse().map(Number) 
   }