71 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			71 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| /*!
 | |
|  * repeat-string <https://github.com/jonschlinkert/repeat-string>
 | |
|  *
 | |
|  * Copyright (c) 2014-2015, Jon Schlinkert.
 | |
|  * Licensed under the MIT License.
 | |
|  */
 | |
| 
 | |
| 'use strict';
 | |
| 
 | |
| /**
 | |
|  * Results cache
 | |
|  */
 | |
| 
 | |
| var res = '';
 | |
| var cache;
 | |
| 
 | |
| /**
 | |
|  * Expose `repeat`
 | |
|  */
 | |
| 
 | |
| module.exports = repeat;
 | |
| 
 | |
| /**
 | |
|  * Repeat the given `string` the specified `number`
 | |
|  * of times.
 | |
|  *
 | |
|  * **Example:**
 | |
|  *
 | |
|  * ```js
 | |
|  * var repeat = require('repeat-string');
 | |
|  * repeat('A', 5);
 | |
|  * //=> AAAAA
 | |
|  * ```
 | |
|  *
 | |
|  * @param {String} `string` The string to repeat
 | |
|  * @param {Number} `number` The number of times to repeat the string
 | |
|  * @return {String} Repeated string
 | |
|  * @api public
 | |
|  */
 | |
| 
 | |
| function repeat(str, num) {
 | |
|   if (typeof str !== 'string') {
 | |
|     throw new TypeError('expected a string');
 | |
|   }
 | |
| 
 | |
|   // cover common, quick use cases
 | |
|   if (num === 1) return str;
 | |
|   if (num === 2) return str + str;
 | |
| 
 | |
|   var max = str.length * num;
 | |
|   if (cache !== str || typeof cache === 'undefined') {
 | |
|     cache = str;
 | |
|     res = '';
 | |
|   } else if (res.length >= max) {
 | |
|     return res.substr(0, max);
 | |
|   }
 | |
| 
 | |
|   while (max > res.length && num > 1) {
 | |
|     if (num & 1) {
 | |
|       res += str;
 | |
|     }
 | |
| 
 | |
|     num >>= 1;
 | |
|     str += str;
 | |
|   }
 | |
| 
 | |
|   res += str;
 | |
|   res = res.substr(0, max);
 | |
|   return res;
 | |
| }
 |