👔String extension

JSvalueprimitiveString ⟩ 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()
// ⭐ 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