javascript - How can I prepend characters to a string using loops? - Stack Overflow

I have an input field that expects a 10 digit number. If the user enters and submits a number less than

I have an input field that expects a 10 digit number. If the user enters and submits a number less than 10 digits, the function would simply add a "0" until the inputed value is 10 digits in length.

I haven't really used, or understand how recursive functions really work, but I'm basically looking at an efficient way of doing this. One minor issue I'm having is figuring out how to prepend the "0"s at the beginning of the string rather than appended to the end.

My thinking:

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
    }
}

I have an input field that expects a 10 digit number. If the user enters and submits a number less than 10 digits, the function would simply add a "0" until the inputed value is 10 digits in length.

I haven't really used, or understand how recursive functions really work, but I'm basically looking at an efficient way of doing this. One minor issue I'm having is figuring out how to prepend the "0"s at the beginning of the string rather than appended to the end.

My thinking:

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
    }
}
Share Improve this question edited Oct 27, 2016 at 17:40 Félix Adriyel Gagnon-Grenier 8,89310 gold badges57 silver badges68 bronze badges asked Oct 27, 2016 at 17:27 Kode_12Kode_12 4,86813 gold badges56 silver badges108 bronze badges 3
  • Wow, pletely overlooked such a simple syntax, thanks – Kode_12 Commented Oct 27, 2016 at 17:32
  • 1 Lots of good answers here: stackoverflow./questions/5366849/… – Jeff McCloud Commented Oct 27, 2016 at 17:40
  • Make sure you watch out for type coercion which might influence number conversions when using padded zero numbers in JavaScript. developer.mozilla/en-US/docs/Web/JavaScript/Guide/… For instance: Decimal literals can start with a zero (0) followed by another decimal digit, but If the next digit after the leading 0 is smaller than 8, the number gets parsed as an octal number. – Benjamin Dean Commented Oct 27, 2016 at 17:47
Add a ment  | 

5 Answers 5

Reset to default 5

Change:

sQuery += "0"; // added at end of string

to:

sQuery = "0" + sQuery; // added at start of string

To remove the for loop/recursion, you could slice out the desired length in one step:

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

Simple generic function using 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(""));

Alternate version that doesn't affect strings over your set limit:

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

It will ultimately depend on your needs how you want to implement this behavior.

The += operator adds things to the end of strings similar to:

sQuery=sQuery+"0"

You can add characters to the front of a string like this

sQuery="0"+sQuery

I also found something interesting here. it works like this:

("00000" + sQuery).slice(-5)

You would add zeros to the front then slice off everything except the last 5. so to get 10 characters you would use:

("0000000000" + n).slice(-10)

You don't need recursion to solve this, just a simple for loop should do the trick. Try this:

function lengthCheck (sQuery) {
    for (var i = sQuery.length; i<10; i++) {
        sQuery = "0" + sQuery;  
    }
    return sQuery;
}

You're looking to pad the string with zeroes. This is an example I've used before from here and will shorten your code a little bit:

function lengthCheck (sQuery) {
    while (sQuery.length < 10)
        sQuery = 0 + sQuery;
    return sQuery;
}

I believe this has already been answered here (or similar enough to provide you the solution): How to output integers with leading zeros in JavaScript

发布者:admin,转转请注明出处:http://www.yc00.com/questions/1745047590a4608190.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信