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

时间:2016-03-27 17:46:40

标签: javascript arrays object reverse

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

给定非负整数,返回一个包含相反顺序的独立数字列表的数组。 例: 348597 =>正确的解决方案应该是[7,9,5,8,4,3]

下面的功能显然不正确,因为它返回[" 7"," 9"," 5"," 8",& #34; 4"," 3"] - 正确的订单,但带引号。我怎么能修改它以便它返回[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;
}

7 个答案:

答案 0 :(得分:7)

“单线”解决方案:

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

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

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

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

答案 1 :(得分:4)

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

答案 2 :(得分:4)

更好的是,将它减少到两行:

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

最后map调用将一个函数应用于数组中的每个元素(在这种情况下,函数将字符串转换为对象) - 其他所有内容只是将数字转换为字符串,将字符串拆分为数组并扭转它。

传统上,parseInt会在map调用中使用,但会产生strange behaviour

答案 3 :(得分:2)

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

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

答案 4 :(得分:1)

只需拆分和反转

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

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

答案 5 :(得分:1)

如果你关心表现,那就是那个。

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

答案 6 :(得分:0)

对于初学者来说,他们可能想以清晰的英语来了解如何解决此问题的清晰格式,这可能有助于理解它:

timer