我有一个输入字段,需要10位数字。如果用户输入并提交小于10位的数字,则该函数只需添加“0”,直到输入的值为10位数。
我还没有真正使用过,或者理解递归函数是如何工作的,但我基本上是在寻找一种有效的方法。我遇到的一个小问题是弄清楚如何在字符串的开头添加“0”而不是附加到结尾。
我的想法:
function lengthCheck(sQuery) {
for (var i = 0; i < sQuery.length; i++) {
if (sQuery.length !== 10) {
sQuery += "0";
//I'd like to add the 0s to the beggining of the sQuery string.
console.log(sQuery);
lengthCheck(sQuery);
} else return sQuery
}
}
答案 0 :(得分:5)
变化:
sQuery += "0"; // added at end of string
为:
sQuery = "0" + sQuery; // added at start of string
要删除for循环/递归,您可以一步切出所需的长度:
function padZeros(sQuery) {
// the max amount of zeros you want to lead with
const maxLengthZeros = "0000000000";
// takes the 10 rightmost characters and outputs them in a new string
return (maxLengthZeros + sQuery).slice(-10);
}
使用ES6的简单通用函数repeat
:
// edge case constraints not implemented for brevity
function padZeros(sQuery = "", maxPadding = 10, outputLength = 10) {
// the max amount of zeros you want to lead with
const maxLengthZeros = "0".repeat(maxPadding);
// returns the "outputLength" rightmost characters
return (maxLengthZeros + sQuery).slice(-outputLength);
}
console.log('padZeros: ' + padZeros("1234567890"));
console.log('padZeros: ' + padZeros("123"));
console.log('padZeros: ' + padZeros(""));
替代版本不会影响超出设定限制的字符串:
function padZerosIfShort(inputString = "", paddedOutputLength = 10) {
let inputLen = inputString.length;
// only padded if under set length, otherwise returned untouched
return (paddedOutputLength > inputLen)
? "0".repeat(paddedOutputLength - inputLen) + inputString
: inputString;
}
console.log('padZerosIfShort: ' + padZerosIfShort("1234567890", 5));
console.log('padZerosIfShort: ' + padZerosIfShort("123", 5));
console.log('padZerosIfShort: ' + padZerosIfShort("", 5));
最终将取决于您的需求,以实现此行为。
答案 1 :(得分:2)
+=
运算符将字符串添加到字符串的末尾,类似于:
sQuery=sQuery+"0"
您可以在字符串前面添加字符,如下所示
sQuery="0"+sQuery
我还发现了一些有趣的东西here。它的工作原理如下:
("00000" + sQuery).slice(-5)
您可以在前面添加零,然后切掉除最后一个之外的所有内容。这样就可以使用10个字符:
("0000000000" + n).slice(-10)
答案 2 :(得分:1)
你不需要递归来解决这个问题,只需一个简单的for循环即可。试试这个:
function lengthCheck (sQuery) {
for (var i = sQuery.length; i<10; i++) {
sQuery = "0" + sQuery;
}
return sQuery;
}
答案 3 :(得分:1)
您希望填充字符串为零。这是我在here之前使用过的一个例子,会稍微缩短您的代码:
function lengthCheck (sQuery) {
while (sQuery.length < 10)
sQuery = 0 + sQuery;
return sQuery;
}
答案 4 :(得分:0)
我相信这已经在这里得到解答(或类似的足以为您提供解决方案):How to output integers with leading zeros in JavaScript