我正在尝试生成一个生成数字序列的函数,并相应地在其前面添加 0。但是,它没有输出正确的数字:
const generatingNumber = (start, end) => {
let result = [];
let output = '';
for(let num = start; num <= end; num++){
if(num.toString().length === 1){
output = '000' + num.toString();
result.push(parseInt(output));
} else if (num.toString().length === 2){
output = '00' + num.toString();
result.push(parseInt(output));
} else if (num.toString() === 3){
output = '0' + num.toString();
result.push(parseInt(output));
}
result.push(num);
}
return result.join('n');
};
console.log(generatingNumber(1, 3000));
知道我在这里错过了什么为什么它不加零吗?
还有没有更简洁的方法可以做到这一点?
您可以使用padStart
方法。
padStart((方法用另一个字符串填充当前字符串(如果需要,可以多次填充(,直到生成的字符串达到给定长度。填充从当前字符串的开头应用。
const generatingNumber = (start, end) => {
let result = [];
let output = '';
for (let num = start; num <= end; num++) {
result.push(num.toString().padStart(4, 0));
}
return result.join('n');
};
console.log(generatingNumber(1, 10));
这是你想要的吗
const generatingNumber = (start, end) => {
let result = [];
let output = '';
for (let num = start; num <= end; num++) {
if (num.toString().length === 1) {
output = '000' + num.toString();
result.push(output);
} else if (num.toString().length === 2) {
output = '00' + num.toString();
result.push(output);
} else if (num.toString().length === 3) {
output = '0' + num.toString();
result.push(output);
} else {
result.push(num);
}
}
return result.join('n');
};
console.log(generatingNumber(1, 3000));
parseInt('0001')
将导致1
。parseInt
将删除实际数字之前的所有0,因为0001和1在整数中是相同的。
所以你必须只推送结果中的字符串。
parseInt(( 在解析字符串之前从字符串中删除所有前导零。您可以更改
output = '0' + num.toString();
result.push(parseInt(output));
自
output = '0' + num.toString();
result.push(output);
以及推送到结果数组的所有其他类似状态。
它将存储字符串,但你不能存储带有前导零的数字。
你想要的不是修改值,而是修改值的表示。
">00000000"和"0"之间没有数字差异;两者都仍然是值 0。因此,如果将值转换为number
类型,则无法显示这些前导零。
这是将数字转换为数值的行
result.push(parseInt(output));
如果要保留输出中的前导零,请不要将其转换为数字;请将其保留为字符串。
另外,与其根据长度使用那些手动 if,不如看看 padStart 方法。它可以"填充"前面的那些零,无论你想要多少位,而不仅仅是 4。
一种通用的方法,没有特定长度或范围的界限,使用Array.from
、map
和padStart
:
const generatingNumber = (start, end) => {
const range = end - start + 1;
const maxLen = ('' + end).length;
return Array.from({length: range}).map((_, i) =>
(i + start).toString().padStart(maxLen, '0'));
};
console.log(generatingNumber(5, 3000).join('n'));