You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
35 lines
952 B
35 lines
952 B
/** Used as references for various `Number` constants. */ |
|
var MAX_SAFE_INTEGER = 9007199254740991; |
|
|
|
/* Built-in method references for those with the same name as other `lodash` methods. */ |
|
var nativeFloor = Math.floor; |
|
|
|
/** |
|
* The base implementation of `_.repeat` which doesn't coerce arguments. |
|
* |
|
* @private |
|
* @param {string} string The string to repeat. |
|
* @param {number} n The number of times to repeat the string. |
|
* @returns {string} Returns the repeated string. |
|
*/ |
|
function baseRepeat(string, n) { |
|
var result = ''; |
|
if (!string || n < 1 || n > MAX_SAFE_INTEGER) { |
|
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); |
|
if (n) { |
|
string += string; |
|
} |
|
} while (n); |
|
|
|
return result; |
|
} |
|
|
|
module.exports = baseRepeat;
|
|
|