2.0.3 • Published 3 years ago

ytech-js-extensions v2.0.3

Weekly downloads
10
License
MIT
Repository
github
Last release
3 years ago

ytech-js-extensions

Simple js extensions for Array, String, Date, Math and Object

npm version code coverage install size npm downloads License: MIT

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-extensions

Example

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

String

Date

Math

Math.Convert

Math.Coord

Object

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 message

EqualOptions

ParamTypeDefaultDescription
checkKeysLengthBooleanfalsetrue => restrict comparing by properties: equal({}, {v:null}) === false. True will ignore ignoreFunctions and ignoreEmptyArrays if Object.keys.length are different
ignoreEmptyArraysBooleantruetrue => equal({}, {arr:[]}) === true
ignoreFunctionsBooleantruetrue => equal({fnc:function(){return 's'} }, {fnc:function(){return 'b'} }) === true
showFalseReasonBoolean or Function(msg,v1,v2,key)falsetrue if we need to add to options.falseReason message if equal is false function if we need to use own report-logic
falseReasonString - outputwill 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

ParamTypeDefaultDescription
removeEmptyArraysBooleantruetrue => remove arrays with length === 0
removeNullsFromArraysBooleantruetrue => 1, null, 2 filter to 1, 2
trimStringsBooleantruetrue => use the default string.trim()
removeEmptyStringsBooleantruetrue => 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];
      }
2.0.3

3 years ago

2.0.2

3 years ago

2.0.1

3 years ago

2.0.0

3 years ago

1.0.2

5 years ago

1.0.1

6 years ago

1.0.0

6 years ago

0.0.2

6 years ago

0.0.1

6 years ago