Low-level JavaScript algorithms as shorthand for everyday use in frontend & backend code.
To use this module, install locally using the command below, or clone this repository and import the .js files directly from source. Full documentation can be found on the GitHub Pages Site for this project.
npm i @mitevpi/algos
Imports can be done through the aggregating index.js file or via individual members.
// es5
const algos = require('./index.js'); // from source
const algos = require('@mitevpi/algos') // from npm
// es6
import * as Algos from "../src"; // from source
import * as Algos from from "@mitevpi/algos"; // from npm
// from source
const Arrays = require("./Arrays");
const Numbers = require("./Numbers");
// from npm
const { Arrays } = require("@mitevpi/algos");
const { Numbers } = require("@mitevpi/algos");
import { Arrays, Numbers } from "@mitevpi/algos"; // es6
<html lang="en">
<head>
<meta charset="utf-8" />
<!-- import minified script from CDN or copy it locally -->
<script src="../dist/algos.umd.min.js"></script>
</head>
<body>
<script>
var arr = [1, 2, 3, 4, 5]; // create array
var result = algos.Arrays.sum(arr); // sum the array
console.log("LIBRARY", algos); // imported lib object: classes, functions
console.log("RESULT", result); // 15
</script>
</body>
</html>
For full examples of usage, please refer to the test and samples folder which have a wide variety of use and test cases to learn from.
This is a suite of functions to be used on Arrays of any kind and data type.
Considering the following input:
import { Arrays } from "@mitevpi/algos";
// any level of nesting as an input
const array01 = [
[1, 2, 3],
[4, 5, 7]
];
const array02 = [[[1, 2, 3]], [4, 5, 7]];
const array03 = [[[1, 2, 3]], [[4, 5, 7]]];
const array04 = [1, [0, [[1, [2, 3], 0]]], [[4, 5, 7]]];
const flat01 = Arrays.flatten(array01); // uniform nesting like array02/array03
// [1, 2, 3, 4, 5, 7] <- Expected Result
const flat04 = Arrays.flatten(array04); // non-uniform nesting
// [1, 0, 1, 2, 3, 0, 4, 5, 7] <- Expected Result
const array2 = ["tom", "peter", "mary", "tom", "mary", "mary", "jeremy"];
const res = Arrays.summarize(array2); // get a summary of the array contents
// {tom: 2, peter: 1, mary: 3, jeremy: 1} <- Expected Result
This is a suite of functions to be used on Arrays which contain Objects.
Considering the following input:
import { ArraysObjective } from "@mitevpi/algos";
const states = [
{ population: 10, size: 13, state: "OH", near: "KY" },
{ population: 20, size: 20, state: "KY", near: "TN" },
{ population: 60, size: 20, state: "IN", near: "PA" },
{ population: 40, size: 13, state: "PA", near: "NY" }
];
// Auto Normalize all values between 0 to 1 on objects
// which have keys containing numerical value
const res = ArraysObjective.normalizeAuto(states);
// We expect the return object to look like this:
console.log(res);
0:Object {population: 0, size: 0, state: "OH", …}
1:Object {population: 0.2, size: 1, state: "KY", …}
2:Object {population: 1, size: 1, state: "IN", …}
3:Object {population: 0.6, size: 0, state: "PA", …}
// Normalize all values between 0 to 1 on values of objects in the array
// which correspond to the input key
const res = ArraysObjective.normalizeByKey(states, "population");
// We expect the return object to look like this:
console.log(res);
0:Object {population: 0, size: 13, state: "OH", …}
1:Object {population: 0.2, size: 20, state: "KY", …}
2:Object {population: 1, size: 20, state: "IN", …}
3:Object {population: 0.6, size: 13, state: "PA", …}
// reformat the array to be grouped by unique same values in a corresponding key
const res = ArraysObjective.groupBy(states, "size");
// We expect that the return object will be reformatted and grouped
// by the two unique values in the "size" key
console.log(res);
13:Array(2) [Object, Object]
0:Object {population: 10, size: 13, state: "OH", …}
1:Object {population: 40, size: 13, state: "PA", …}
20:Array(2) [Object, Object]
0:Object {population: 20, size: 20, state: "KY", …}
1:Object {population: 60, size: 20, state: "IN", …}
The module can be built by running npm run build
in the root directory of this repository. Documentation is built using the Documentation module from npm, and by running npm run docs
in the root directory of this repository. This will create markdown and HTML documentaion.
Testing is handled using jest and code coverage is evaluated using nyc. Tests can be initiated by running npm test
in the root directory of this repository (be sure to first set your required env variables such as GMAPS_KEY).
The following commands are available during development.
npm test # run tests with Jest
npm run coverage # run tests with coverage and open it on browser
npm run lint # lint code
npm run docs # generate docs
npm run build # transpile code