如何使用循环将字符前置到字符串?

时间:2016-10-27 17:27:44

标签: javascript jquery

我有一个输入字段,需要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
    }
}

5 个答案:

答案 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