| var baseToString = require('../internal/baseToString'); |
| |
| /* Native method references for those with the same name as other `lodash` methods. */ |
| var nativeFloor = Math.floor, |
| nativeIsFinite = global.isFinite; |
| |
| /** |
| * Repeats the given string `n` times. |
| * |
| * @static |
| * @memberOf _ |
| * @category String |
| * @param {string} [string=''] The string to repeat. |
| * @param {number} [n=0] The number of times to repeat the string. |
| * @returns {string} Returns the repeated string. |
| * @example |
| * |
| * _.repeat('*', 3); |
| * // => '***' |
| * |
| * _.repeat('abc', 2); |
| * // => 'abcabc' |
| * |
| * _.repeat('abc', 0); |
| * // => '' |
| */ |
| function repeat(string, n) { |
| var result = ''; |
| string = baseToString(string); |
| n = +n; |
| if (n < 1 || !string || !nativeIsFinite(n)) { |
| return result; |
| } |
| // Leverage the exponentiation by squaring algorithm for a faster repeat. |
| // See https://en.wikipedia.org/wiki/Exponentiation_by_squaring for more details. |
| do { |
| if (n % 2) { |
| result += string; |
| } |
| n = nativeFloor(n / 2); |
| string += string; |
| } while (n); |
| |
| return result; |
| } |
| |
| module.exports = repeat; |