The useful Javascript prototype functions

I want to share some Javascript prototype functions as below:

String.prototype.format = function (n, x, s, c) {
    /// <summary>
    /// Number.prototype.format(n, x, s, c)
    /// Example:
    /// 12345678.9.format(2, 3, ',', '.');  // "12,345,678.90"
    /// 123456.789.format(4, 4, ' ', ':');  // "12 3456:7890"
    /// 12345678.9.format(0, 3, '-');       // "12-345-679"
    /// </summary>
    /// <param name="n" type="type">length of decimal</param>
    /// <param name="x" type="type">length of whole part</param>
    /// <param name="s" type="type">sections delimiter</param>
    /// <param name="c" type="type">decimal delimiter</param>
    /// <returns type=""></returns>
    var re = '\\d(?=(\\d{' + (x || 3) + '})+' + (n > 0 ? '\\D' : '') + ')';
    // console.log(this.toString());
    if (this.toString()) {
        var item = this.toString().replace(/,/g, '');
        var num = Number(item).toFixed(Math.max(0, ~~n));
        return (c ? num.replace('.', c) : num).replace(new RegExp(re, 'g'), '&' + (s || ','));
    }
    return '';
};


String.prototype.replaceAll = function (search, replacement) {
    /// <summary>
    /// Replace all string in js
    /// </summary>
    /// <param name="search" type="type"></param>
    /// <param name="replacement" type="type"></param>
    /// <returns type=""></returns>
    var target = this;
    return target.replace(new RegExp(search, 'g'), replacement);
};


String.prototype.startsWith = function (word) {
    /// <summary>
    /// check whether starts With the word
    /// </summary>
    /// <param name="word" type="type"></param>
    /// <returns type=""></returns>
    return (this.indexOf(word) == 0);
};

//js startsWith function
String.prototype.endsWith = function (word) {
    /// <summary>
    /// check whether ends with the word
    /// </summary>
    /// <param name="word" type="type"></param>
    /// <returns type=""></returns>
    return str.indexOf(word, str.length - word.length) !== -1;
};

Date.prototype.addMonths = function (m) {
    /// <summary>
    /// Add months for date object
    /// </summary>
    /// <param name="m" type="type"></param>
    /// <returns type=""></returns>
    var d = new Date(this);
    var years = Math.floor(m / 12);
    var months = m - (years * 12);
    if (years) d.setFullYear(d.getFullYear() + years);
    if (months) d.setMonth(d.getMonth() + months);
    return d;
}

Date.prototype.addDays = function (days) {
    /// <summary>
    /// Add days for date object
    /// </summary>
    /// <param name="days" type="type"></param>
    /// <returns type=""></returns>
    var dat = new Date(this.valueOf());
    dat.setDate(dat.getDate() + days);
    return dat;
}

// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/find
// find the element in array
// e.g  
//var currItem = dataSource.find(function (ds) {
//    return ds.startDate.getTime() == date.getTime()
//});
if (!Array.prototype.find) {
    Object.defineProperty(Array.prototype, 'find', {
        value: function (predicate) {
            // 1. Let O be ? ToObject(this value).
            if (this == null) {
                throw new TypeError('"this" is null or not defined');
            }

            var o = Object(this);

            // 2. Let len be ? ToLength(? Get(O, "length")).
            var len = o.length >>> 0;

            // 3. If IsCallable(predicate) is false, throw a TypeError exception.
            if (typeof predicate !== 'function') {
                throw new TypeError('predicate must be a function');
            }

            // 4. If thisArg was supplied, let T be thisArg; else let T be undefined.
            var thisArg = arguments[1];

            // 5. Let k be 0.
            var k = 0;

            // 6. Repeat, while k < len
            while (k < len) {
                // a. Let Pk be ! ToString(k).
                // b. Let kValue be ? Get(O, Pk).
                // c. Let testResult be ToBoolean(? Call(predicate, T, « kValue, k, O »)).
                // d. If testResult is true, return kValue.
                var kValue = o[k];
                if (predicate.call(thisArg, kValue, k, o)) {
                    return kValue;
                }
                // e. Increase k by 1.
                k++;
            }

            // 7. Return undefined.
            return undefined;
        }
    });
}


if (!Number.prototype.padLeft) {
    Number.prototype.padLeft = function (n, str) {
        /// <summary>
        /// pad left with 0
        /// e.g.  console.log((23).padLeft(5));     //=> '00023'
        /// </summary>
        /// <param name="n" type="type"></param>
        /// <param name="str" type="type"></param>
        /// <returns type=""></returns>
        return (this < 0 ? '-' : '') +
                Array(n - String(Math.abs(this)).length + 1)
                 .join(str || '0') +
               (Math.abs(this));
    }
}

// https://tc39.github.io/ecma262/#sec-array.prototype.includes
if (!Array.prototype.includes) {
    Object.defineProperty(Array.prototype, 'includes', {
        value: function (searchElement, fromIndex) {

            if (this == null) {
                throw new TypeError('"this" is null or not defined');
            }

            // 1. Let O be ? ToObject(this value).
            var o = Object(this);

            // 2. Let len be ? ToLength(? Get(O, "length")).
            var len = o.length >>> 0;

            // 3. If len is 0, return false.
            if (len === 0) {
                return false;
            }

            // 4. Let n be ? ToInteger(fromIndex).
            //    (If fromIndex is undefined, this step produces the value 0.)
            var n = fromIndex | 0;

            // 5. If n ≥ 0, then
            //  a. Let k be n.
            // 6. Else n < 0,
            //  a. Let k be len + n.
            //  b. If k < 0, let k be 0.
            var k = Math.max(n >= 0 ? n : len - Math.abs(n), 0);

            function sameValueZero(x, y) {
                return x === y || (typeof x === 'number' && typeof y === 'number' && isNaN(x) && isNaN(y));
            }

            // 7. Repeat, while k < len
            while (k < len) {
                // a. Let elementK be the result of ? Get(O, ! ToString(k)).
                // b. If SameValueZero(searchElement, elementK) is true, return true.
                if (sameValueZero(o[k], searchElement)) {
                    return true;
                }
                // c. Increase k by 1. 
                k++;
            }

            // 8. Return false
            return false;
        }
    });
}

Loading

Views: 3
Total Views: 364 ,

Oh hi there 👋
It’s nice to meet you.

Sign up to receive awesome content in your inbox.

We don’t spam! Read our privacy policy for more info.

Oh hi there 👋 It’s nice to meet you.

Sign up to receive awesome content in your inbox.

We don’t spam! Read our privacy policy for more info.

Ads Blocker Image Powered by Code Help Pro

Ads Blocker Detected!!!

We have detected that you are using extensions to block ads. Please support us by disabling these ads blocker.

Thank you so much!