ytech-js-extensions
v2.0.3
Published
Simple prototype extensions which can improve your working with js
Maintainers
Readme
ytech-js-extensions
Simple js extensions for Array, String, Date, Math and Object
Features
- Lightweight
- ES5 support
- Available importing of each function (not only prototype assignments which are used by default)
Installing
Using npm:
npm install ytech-js-extensionsExample
Using with default import
import "ytech-js-extensions"; //ES6 way for import
// Remove item from array
var arr = [{ id: 1 }, { id: 2 }, { id: 3 }];
var removedItem = arr.remove(function (item) {
return item.id == 2;
});
console.log(arr, removedItem);
// Compare dates without time
var date1 = new Date(2018, 1, 1, 12, 23, 16);
var date2 = new Date(2018, 1, 1, 12, 24, 19);
console.log(Date.compareByDate(date1, date2));
// Compare strings with ignoring case
var str1 = "test";
var str2 = "tEsT";
console.log(str1.equal(str2));Using with partial import
import arrayRemove from "ytech-js-extensions/lib/array/remove";
// Remove item from array
var arr = [{ id: 11 }, { id: 12 }, { id: 13 }];
var removedItem = arrayRemove.call(arr, function (item) {
return item.id == 12;
});
console.log(arr, removedItem);Array
- instance
- .last() ⇒
any - last item from array (undefined if array is empty) - .addIfNotExists(item: any, null | String | predicate) ⇒
executed item: any - add item if it doesn't exist. The second argument => Null - for primitives, string - search by name, function - predicate like in a .filter() - .remove(item: any | predicate: function) ⇒
executed item: any - remove item by predicate for searching or by item (for direct comparing)
- .last() ⇒
- static
- .concatNotNull(...arrays: [] | null) ⇒
new Array - concatinate arrays exlcuding null-arrays => Array.concatNotNull([1,2], null)
- .concatNotNull(...arrays: [] | null) ⇒
String
- instance
- .equal(value: String) ⇒
Boolean - compare with ignoring case - .fromCamelCase() ⇒
new String - transform from camelCase: 'myCamelCaseString' to 'My Camel Case String' - .toCamelCase() ⇒
new String - split string by spaces and join to camelCase: 'My camel Case string' to 'myCamelCaseString' - .toLowerCaseFirst() ⇒
new String - set to lower case first char - .toUpperCaseFirst() ⇒
new String - set to upper case first char
- .equal(value: String) ⇒
Date
- instance
- .equal(value: Date) ⇒
Boolean - compare by values - .equalDates(value: Date) ⇒
Boolean - compare without time-values - .addDays(value: Number) ⇒
Date - .addMonths(value: Number) ⇒
Date - .addYears(value: Number) ⇒
Date - .resetTime() ⇒
Date - .resetUTCTime() ⇒
Date
- .equal(value: Date) ⇒
- static
- .tryParseJSON(value: String) ⇒
new Date or same String - try parse Date from String-Date-ISO-Format - .compareByDate(v1: Date, v2: Date) ⇒
-1, 0 or 1 - compare without time-value for sort functions - .UTCFromValues(year: Number, month: Number, date: Number) ⇒
new Date - create UTC date - .UTCFromDate(Date) ⇒
new Date - create UTC date
- .tryParseJSON(value: String) ⇒
Math
- Math .randomInt(min?: Number, max?: Number) ⇒
Int - generate random int between values
Math.Convert
- Math.Convert .kmToMiles(km: Number) ⇒
Float - convert kilometers to miles - Math.Convert .milesToKm(miles: Number) ⇒
Float - convert miles to kilometers - Math.Convert .degToRad(value: Number) ⇒
Float - convert degrees to radians
Math.Coord
- Math.Coord .distanceBetween(lat1: Number, lng1: Number, lat2: Number, lng2: Number) ⇒
Kilometers: Number - distance between 2 coordinates - Math.Coord .addToLat(lat: Number, km: Number) ⇒
Latitude: Float - add distance to latitude - Math.Coord .addToLng(lng: Number, lat: Number, km: Number) ⇒
Longitude: Float - add distance to longitude
Object
- Object .equal(v1: any, v2: any, options?: EqualOptions) ⇒
Boolean - recursively compare 2 values with ignoring null and by setted EqaulOptions - Object .tryParseJSONDate(obj: any) ⇒
the same object: any - recursively find string values and trying parse to Date by Date.tryParseJSON(str) - Object .removeNulls(obj: String|Array|Object, options?: RemoveOptions) ⇒
the same object: any - remove null, undefined, ''(empty-string) properties by setted options
Object.equal
Compare 2 objects by properties (with using EqualOptions)
import "ytech-js-extensions"; //ES6 way for import
import EqualOptions from "ytech-js-extensions/object/equal/equalOptions.js";
// Compare equals
var v1 = { nested: { id: 1 }, arr: ["s", "d"], dt: new Date() };
var v2 = {
nested: { id: 1 },
arr: ["s", "d"],
dt: new Date(),
fnc: function () {},
};
console.log(Object.equal(v1, v2)); //expected true
//Compare with options
var options = new EqualOptions();
options.ignoreEmptyArrays = true;
options.ignoreFunctions = false; //here we setted ignoreFunctions to false
options.checkKeysLength = false;
options.showFalseReason = true; //or function(message, v1, v2, key) { bla-bla; return message}
console.log(Object.equal(v1, v2, options), options.falseReason); //expected false and falseReason as string messageEqualOptions
| Param | Type | Default | Description | | ----------------- | ---------------------------------- | ------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | checkKeysLength | Boolean | false | true => restrict comparing by properties: equal({}, {v:null}) === false. True will ignore ignoreFunctions and ignoreEmptyArrays if Object.keys.length are different | | ignoreEmptyArrays | Boolean | true | true => equal({}, {arr:[]}) === true | | ignoreFunctions | Boolean | true | true => equal({fnc:function(){return 's'} }, {fnc:function(){return 'b'} }) === true | | showFalseReason | Boolean or Function(msg,v1,v2,key) | false | true if we need to add to options.falseReason message if equal is false function if we need to use own report-logic | | falseReason | String - output | | will be added message if showFalseReason != true and equal is false |
Object.removeNulls
Remove null properties (values) from String, Array or Object (with using RemoveOptions)
import "ytech-js-extensions"; //ES6 way for import
import RemoveOptions from "ytech-js-extensions/object/remove/removeOptions.js";
// Remove without default options
var v = {
id: 1,
arr: [1, null, 2],
arr2: [null, " ", undefined],
arr3: [],
s: " ",
s2: " str ",
};
console.log(Object.removeNulls(v)); //expected { id: 1, arr: [1, 2], s2: 'str' }
//Remove with options
var options = new RemoveOptions();
options.removeEmptyArrays = true;
options.removeNullsFromArrays = false;
options.trimStrings = false; //use 's'.trim()
options.removeEmptyStrings = true;
var v = {
id: 1,
arr: [1, null, 2],
arr2: [null, " ", undefined],
arr3: [],
s: " ",
s2: " str ",
};
console.log(Object.removeNulls(v, options)); //expected { id: 1, arr: [1, 2], s2: 'str' }RemoveOptions
| Param | Type | Default | Description | | --------------------- | ------- | ------- | ------------------------------------------------------------------------------------------------------------------------------------- | | removeEmptyArrays | Boolean | true | true => remove arrays with length === 0 | | removeNullsFromArrays | Boolean | true | true => [1, null, 2] filter to [1, 2] | | trimStrings | Boolean | true | true => use the default string.trim() | | removeEmptyStrings | Boolean | true | true => remove properties, values which has string value == '' |
Troubleshooting
Some packages (like html2canvas, pdfjs) can stop working if you have prototype extensions of default types (Array, String, Object etc.). In this case we can
include in project only specific functions instead of prototype-assign - see Example OR
temporarily remove extensions and assign again later
// removing prototype extensions otherwise it doesn't work with pdfjs const arrProto = {}; for (const i in Array.prototype) { arrProto[i] = Array.prototype[i]; delete Array.prototype[i]; } // ... do something here // rollback prototype extensions for (const i in arrProto) { Array.prototype[i] = arrProto[i]; }
