👔String extension
JS ⟩ value ⟩ primitive ⟩ String ⟩ extension
add custom methods to String.prototype.
// 🔸 str.characters - iterable iterator of characters
// 🔸 str.codePoints - array of code points
// 🔸 str.codeUnits - array of code units
// 🔹 str.replaceWhitespaces()
replit ⟩ String extension
// ⭐ install "grapheme-splitter": `npm install grapheme-splitter`
// 2023.01.03 - 19:40 + .codeUnits, .codePoints (support `GraphemeSplitter`)
//
// ⭐ String extension
// -------------------------------------------------------------------
// 🔸 str.characters - iterable iterator of characters
// 🔸 str.codePoints - array of code points
// 🔸 str.codeUnits - array of code units
// 🔹 str.replaceWhitespaces()
// -------------------------------------------------------------------
const { range } = require('./Iterable.js'); // iterable methods
// ⭐ import 'grapheme-splitter'
const GraphemeSplitter = require('grapheme-splitter');
const splitter = new GraphemeSplitter();
// -------------------------------------------------------------------
// String extension
Object.defineProperties(String.prototype, {
// 🔹 str.replaceWhitespaces()
replaceWhitespaces: {
value: function(str = ',') {
return this
.trim() // ⭐️ removes whitespace from both ends
.replace(/\s+/g, str);
},
},
// 🔸 str.characters
// - real characters (grapheme clusters, may contain many code points)
characters: {
get: function() {
// string -> iterable iterator
return splitter.iterateGraphemes(this);
},
},
// 🔸 str.codePoints
// - 1 code point may contain 1 ~ 2 code units.
codePoints: {
get: function() {
let codePoints = [];
for (const char of this) { // an iterator of "code points"
codePoints.push(char.codePointAt(0));
}
return codePoints;
},
},
// 🔸 str.codeUnits
// - 16-bit code units
codeUnits: {
get: function() {
return [...range(0, this.length - 1).map(i => this.charCodeAt(i))];
},
},
});
// export
module.exports = {};
Last updated
Was this helpful?