生成数字,同时在前面添加零



我正在尝试生成一个生成数字序列的函数,并相应地在其前面添加 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')将导致1parseInt将删除实际数字之前的所有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.frommappadStart

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

最新更新