Show More
Commit Description:
add model solution
Commit Description:
add model solution
References:
File last commit:
Show/Diff file:
Action:
node_modules/es5-ext/string/#/at.js
| 35 lines
| 1.0 KiB
| application/javascript
| JavascriptLexer
|
r789 | // Based on: https://github.com/mathiasbynens/String.prototype.at | |||
// Thanks @mathiasbynens ! | ||||
"use strict"; | ||||
var toInteger = require("../../number/to-integer") | ||||
, validValue = require("../../object/valid-value"); | ||||
module.exports = function (pos) { | ||||
var str = String(validValue(this)), size = str.length, cuFirst, cuSecond, nextPos, len; | ||||
pos = toInteger(pos); | ||||
// Account for out-of-bounds indices | ||||
// The odd lower bound is because the ToInteger operation is | ||||
// going to round `n` to `0` for `-1 < n <= 0`. | ||||
if (pos <= -1 || pos >= size) return ""; | ||||
// Second half of `ToInteger` | ||||
// eslint-disable-next-line no-bitwise | ||||
pos |= 0; | ||||
// Get the first code unit and code unit value | ||||
cuFirst = str.charCodeAt(pos); | ||||
nextPos = pos + 1; | ||||
len = 1; | ||||
if ( | ||||
// Check if it’s the start of a surrogate pair | ||||
cuFirst >= 0xd800 && | ||||
cuFirst <= 0xdbff && // High surrogate | ||||
size > nextPos // There is a next code unit | ||||
) { | ||||
cuSecond = str.charCodeAt(nextPos); | ||||
if (cuSecond >= 0xdc00 && cuSecond <= 0xdfff) len = 2; // Low surrogate | ||||
} | ||||
return str.slice(pos, pos + len); | ||||
}; | ||||