将数字转换为反转的数字数组
Convert number to a reversed array of digits
我开发了这个代码笔(http://codepen.io/PiotrBerebecki/pen/qZjojV?editors=0010)试图解决以下JavaScript问题:
给定一个非负整数,按相反顺序返回一个包含独立数字列表的数组。示例:348597=>正确的解决方案应该是[7,9,5,8,4,3]
下面的函数显然是不正确的,因为它返回["7"、"9"、"5"、"8"、"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;
}
"一线"解决方案:
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()
:方法创建并返回一个新数组,该数组调用每个数组元素上提供的函数
添加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));
更好的是,将其减少为两行:
function digitize(num) {
return num.toString().split('').reverse().map(Number);
}
最后的map
调用将一个函数应用于数组中的每个元素(在这种情况下,该函数将字符串转换为对象)-其他一切都只是将数字转换为字符串,将字符串拆分为数组并反转
传统上,parseInt
将用于map
调用,但这会导致奇怪的行为。
只需拆分并反转
var num = 348597,
arr = num.toString().split("").reverse().map(Number);
document.write('<pre>' + JSON.stringify(arr, 0, 4) + '</pre>');
这是您可以看到的许多其他解决方案的简化版本,以深入了解其工作原理。
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));
如果您关心性能,这里就是。
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) {
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)
}
相关文章:
- JavaScript 在数组中查找缺少的数字
- 在javascript数组中分散数字
- 将数组键转换为数字node.js
- 删除JS数组中的最小数字
- 创建具有2个唯一数字的Javascript数组
- Javascript按数字顺序排序()数组
- 如何将数字切成更小的数字以适合我的数组
- Javascript中的非数字索引多维数组
- 指定数组中的元素对,其总和等于特定的目标数字
- 从数组/字符串中删除所有小数和单个数字
- 从数组[Javascript]的总长度中减去一个干净的数字
- 如何获取数组中数字的最大出现次数
- 如何将数字相加并将结果放入数组中
- JS:从数组中查找特定范围内的最低/最高数字
- 返回最大数字的数组
- 将数组中的所有数字组合相加
- 在数组中生成随机数,没有任何重复的数字
- 循环遍历数字和字母数组并仅提取数字
- 给定一个带有数字的数组,我如何编写一个递归函数,当 2 个元素加起来为一个目标时,它会在数组中查找索引
- 函数给出输入数字*数组的长度,而不是输入数字*数组的值(javascript)