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; } }); }
459 total views
The post The useful Javascript prototype functions appeared first on Coder Blog.