USA Array 🇺🇸
Dumb name, useful package
A lightweight dependancy free module to enhance JavaScript's array functionality.
npm i unitedstatesofamerica
Creating a New Array 🇺🇸
Import the wrapper from the module to use the extended methods without exposing the methods to standard arrays
const usa = require('unitedstatesofamerica');
const choices = usa([10, 20, 30, 40, 50]);
choices.shuffle();
To create a new iterable USA Array of a set length without specifying the values contained, use the .withLength(n) method of the USA Array module.
const usa = require('unitedstatesofamerica');
const arr = usa.withLength(5);
const randomValues = arr.map(() => Math.floor(Math.random() * 3) + 1);
console.log(randomValues);
randomValues.countOf(1);
Extending Prototypes 🇺🇸
Optionally, invoke the .exposeProtos() method to expose all arrays to the extended methods.
require('unitedstatesofamerica').exposeProtos();
const choices = [10, 20, 30, 40, 50];
choices.shuffle();
Chaining 🇺🇸
All Array USA methods that return arrays will return a new instance of Array USA, so standard JS Array methods, as well as Array USA methods can be chained.
require('unitedstatesofamerica').exposeProtos();
const grades = ['80', '60', '76', '100', '58', '96', '92', '62', '78', '84'];
const sortedPassingGrades = grades
.toNum()
.filter((score) => score > 72)
.descending();
console.log(sortedPassingGrades);
Array USA Methods 🇺🇸
Useful Methods 🇺🇸
Duplicate Management 🇺🇸
Copies 🇺🇸
Random 🇺🇸
Counts 🇺🇸
Sorting 🇺🇸
Querying 🇺🇸
Math 🇺🇸
Type Management 🇺🇸
Filtering 🇺🇸
Comparing 🇺🇸
Conversion 🇺🇸
Shuffle
.shuffle() will randomize the order of an array using the Fisher–Yates shuffle Algorithm
Example
Array USA Wrapper
const usa = require('unitedstatesofamerica');
const options = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
const unshuffled = usa(options);
const shuffled = unshuffled.shuffle();
Extending Prototype
require('unitedstatesofamerica').exposeProtos();
const unshuffled = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
const shuffled = unshuffled.shuffle();
Without Duplicates
.withoutDuplicates() will return a new array without duplicate items
Example
Array USA Wrapper
const usa = require('unitedstatesofamerica');
const users = usa(['Justin', 'Justin', 'Jack', 'Amanda', 'Mary', 'Amanda']);
const uniqueUsers = users.withoutDuplicates();
Extending Prototype
require('unitedstatesofamerica').exposeProtos();
const users = ['Justin', 'Justin', 'Jack', 'Amanda', 'Mary', 'Amanda'];
const uniqueUsers = users.withoutDuplicates();
Duplicates
.duplicates() filters an array to include only items whose values appear more than once in the array.
Example
Array USA Wrapper
const usa = require('unitedstatesofamerica');
const logins = usa(['Justin', 'Justin', 'Jack', 'Amanda', 'Mary', 'Amanda']);
const duplicateLogins = logins.duplicates();
Extending Prototype
require('unitedstatesofamerica').exposeProtos();
const logins = ['Justin', 'Justin', 'Jack', 'Amanda', 'Mary', 'Amanda'];
const duplicateLogins = logins.duplicates();
Batch
.batch(limit) will batch an array's elements into several nested arrays of a specified length.
Parameters
limit (Integer) - Length of batch
Example
Array USA Wrapper
const usa = require('unitedstatesofamerica');
const unbatched = ['Justin', 'Amanda', 'Mary', 'Kelly', 'Jonathan', 'Tom'];
const batched = usa(unbatched).batch(2);
Extending Prototype
require('unitedstatesofamerica').exposeProtos();
const unbatched = ['Justin', 'Amanda', 'Mary', 'Kelly', 'Jonathan', 'Tom'];
const batched = unbatched.batch(2);
Copy
.copy() will create a Shallow Copy of an array
Example
Array USA Wrapper
const usa = require('unitedstatesofamerica');
const words = usa(['foo', 'bar', 'baz']);
const wordsCopy = words.copy();
Extending Prototype
require('unitedstatesofamerica').exposeProtos();
const words = ['foo', 'bar', 'baz'];
const wordsCopy = words.copy();
Deep Copy
.deepCopy() will make a Deep Copy of an array. This means objects or nested arrays will be replaced with replicated values, without referencing the original array. Changes can be made of the copied array without changing the original array.
Example
Array USA Wrapper
const usa = require('unitedstatesofamerica');
const original = usa([
{ foo: 'bar', foobar: ['foo', 'bar'] },
{ bar: 'foo', barfoo: ['bar', 'foo'] },
{ foobar: ['foo', 'bar'] },
30,
20,
'Why does this array have so many types',
Symbol(),
'Oh yeah, to show you how to it can make a deep copy of any type',
]);
const copied = original.deepCopy();
copied[0].foo = 'baz';
console.log(original[0].foo === copied[0].foo);
Extending Prototype
require('unitedstatesofamerica').exposeProtos();
const original = [
{ foo: 'bar', foobar: ['foo', 'bar'] },
{ bar: 'foo', barfoo: ['bar', 'foo'] },
{ foobar: ['foo', 'bar'] },
30,
20,
'Why does this array have so many types',
Symbol(),
'Oh yeah, to show you how to it can make a deep copy of any type',
];
const copied = original.deepCopy();
copied[0].foo = 'baz';
console.log(original[0].foo === copied[0].foo);
Random
.random() will return a random item in the array
Example
Array USA Wrapper
const usa = require('unitedstatesofamerica');
const words = usa(['foo', 'bar', 'baz']);
words.random();
Extending Prototype
require('unitedstatesofamerica').exposeProtos();
const words = ['foo', 'bar', 'baz'];
words.random();
Random Index
.randomIndex() returns a random index in the array
Example
Array USA Wrapper
const usa = require('unitedstatesofamerica');
const words = usa(['foo', 'bar', 'baz']);
words.randomIndex();
Extending Prototype
require('unitedstatesofamerica').exposeProtos();
const words = ['foo', 'bar', 'baz'];
words.randomIndex();
Count Of
.countOf(val) will return a count of all items in an array matching a specified value.
Parameters
val (any) - Value to match
Example
Array USA Wrapper
const usa = require('unitedstatesofamerica');
const words = usa(['foo', 'bar', 'foo', 'foo', 'baz']);
const fooCount = words.countOf('foo');
Extending Prototype
require('unitedstatesofamerica').exposeProtos();
const words = ['foo', 'bar', 'foo', 'foo', 'baz'];
const fooCount = words.countOf('foo');
Count If
.countIf(condition) will return a count of all items in an array that when passed into a callback function, return true
Parameters
condition (Function) - Callback function. For checking condition, takes in 3 parameters
item - (any) Item in the array
index - Optional (Integer) - Current index in the array
arr - Optional (Array) - Current array
Example
Array USA Wrapper
const usa = require('unitedstatesofamerica');
const grades = usa([99, 93, 60, 70, 100, 80, 78, 100, 98, 94]);
const over90 = grades.countIf((grade) => grade >= 90);
Extending Prototype
require('unitedstatesofamerica').exposeProtos();
const grades = [99, 93, 60, 70, 100, 80, 78, 100, 98, 94];
const over90 = grades.countIf((grade) => grade >= 90);
Last
.last() returns the last item in the array
Example
Array USA Wrapper
const usa = require('unitedstatesofamerica');
const users = usa(['Jack', 'Jill', 'Bob', 'Joe']);
const lastUser = users.last();
Extending Prototype
require('unitedstatesofamerica').exposeProtos();
const users = ['Jack', 'Jill', 'Bob', 'Joe'];
const lastUser = users.last();
Ascending
.ascending() sorts the array in ascending order
Example
Array USA Wrapper
const usa = require('unitedstatesofamerica');
const grades = usa([99, 93, 60, 70, 100, 80, 78, 100, 98, 94]);
const worstToBest = grades.ascending();
Extending Prototype
require('unitedstatesofamerica').exposeProtos();
const grades = [99, 93, 60, 70, 100, 80, 78, 100, 98, 94];
const worstToBest = grades.ascending();
Descending
.descending() sorts the array in descending order
Examples
Array USA Wrapper
const usa = require('unitedstatesofamerica');
const grades = usa([99, 93, 60, 70, 100, 80, 78, 100, 98, 94]);
const bestToWorst = grades.descending();
Extending Prototype
require('unitedstatesofamerica').exposeProtos();
const grades = [99, 93, 60, 70, 100, 80, 78, 100, 98, 94];
const bestToWorst = grades.descending();
Is Empty
.isEmpty() is a simple method that returns true if the specified array's length is 0.
Example
Array USA Wrapper
const usa = require('unitedstatesofamerica');
const arr1 = usa([]);
const arr2 = usa(['foo', 'bar', 'baz']);
console.log(arr1.isEmpty());
console.log(arr2.isEmpty());
arr1.push('foobar');
console.log(arr1.isEmpty());
Extending Prototype
require('unitedstatesofamerica').exposeProtos();
const arr1 = [];
const arr2 = ['foo', 'bar', 'baz'];
console.log(arr1.isEmpty());
console.log(arr2.isEmpty());
Partial Match
.partialMatch(obj) finds the first item matching the key/value pairs of the object passed in.
Parameters
obj (Object) - Object containing key/value pairs of array item to find
Examples
Array USA Wrapper
const usa = require('unitedstatesofamerica');
const users = usa([
{
firstName: 'Jon',
lastName: 'Smith',
email: 'jon.smith@gmail.com',
},
{
firstName: 'Jane',
lastName: 'Doe',
email: 'jdoe@ymail.com',
},
{
firstName: 'Elon',
lastName: 'Musk',
email: 'elon@tesla.com',
},
]);
const person = users.partialMatch({ email: 'jdoe@ymail.com' });
Extending Prototype
require('unitedstatesofamerica').exposeProtos();
const users = [
{
firstName: 'Jon',
lastName: 'Smith',
email: 'jon.smith@gmail.com',
},
{
firstName: 'Jane',
lastName: 'Doe',
email: 'jdoe@ymail.com',
},
{
firstName: 'Elon',
lastName: 'Musk',
email: 'elon@tesla.com',
},
];
const person = users.partialMatch({ email: 'jdoe@ymail.com' });
Partial Match Index
.partialMatch(obj) finds the first index matching the key/value pairs of the object passed in.
Parameters
obj (Object) - Object containing key/value pairs of array item to find
Examples
Array USA Wrapper
const usa = require('unitedstatesofamerica');
const users = usa([
{
firstName: 'Jon',
lastName: 'Smith',
email: 'jon.smith@gmail.com',
},
{
firstName: 'Jane',
lastName: 'Doe',
email: 'jdoe@ymail.com',
},
{
firstName: 'Elon',
lastName: 'Musk',
email: 'elon@tesla.com',
},
]);
const person = users.partialMatchIndex({ email: 'jdoe@ymail.com' });
Extending Prototype
require('unitedstatesofamerica').exposeProtos();
const users = [
{
firstName: 'Jon',
lastName: 'Smith',
email: 'jon.smith@gmail.com',
},
{
firstName: 'Jane',
lastName: 'Doe',
email: 'jdoe@ymail.com',
},
{
firstName: 'Elon',
lastName: 'Musk',
email: 'elon@tesla.com',
},
];
const person = users.partialMatchIndex({ email: 'jdoe@ymail.com' });
Without Nullish Values
.withoutNullishValues() will return a new array without nullish values (null and undefined)
Examples
Array USA Wrapper
const usa = require('unitedstatesofamerica');
const arr1 = [3, 4, 'foo', 'bar', null, 'baz', false, 'foobar', NaN, undefined, ''];
const cleaned = usa(arr1).withoutNullishValues();
Extending Prototype
require('unitedstatesofamerica').exposeProtos();
const arr1 = [3, 4, 'foo', 'bar', null, 'baz', false, 'foobar', NaN, undefined, ''];
const cleaned = arr1.withoutNullishValues();
Without Falsy Values
.withoutFalsyValues() will return a new array without any falsy values from the array
Examples
Array USA Wrapper
const usa = require('unitedstatesofamerica');
const arr1 = [3, 4, 'foo', 'bar', null, 'baz', false, 'foobar', NaN, undefined, ''];
const cleaned = usa(arr1).withoutFalsyValues();
Extending Prototype
require('unitedstatesofamerica').exposeProtos();
const arr1 = [3, 4, 'foo', 'bar', null, 'baz', false, 'foobar', NaN, undefined, ''];
const cleaned = arr1.withoutFalsyValues();
Sum
.sum() returns the sum of all items in a numerical array.
Examples
Array USA Wrapper
const usa = require('unitedstatesofamerica');
const nums = usa([10, 20, 30]);
nums.sum();
Extending Prototype
require('unitedstatesofamerica').exposeProtos();
const nums = [10, 20, 30];
nums.sum();
Difference
.difference() returns the difference of all items in a numerical array.
Examples
Array USA Wrapper
const usa = require('unitedstatesofamerica');
const nums = usa([10, 20, 30]);
nums.difference();
Extending Prototype
require('unitedstatesofamerica').exposeProtos();
const nums = [10, 20, 30];
nums.difference();
Product
.product() returns the product of all items in a numerical array.
Examples
Array USA Wrapper
const usa = require('unitedstatesofamerica');
const nums = usa([10, 20, 30]);
nums.product();
Extending Prototype
require('unitedstatesofamerica').exposeProtos();
const nums = [10, 20, 30];
nums.product();
Quotient
.quotient() returns the quotient of all items in a numerical array.
Array USA Wrapper
const usa = require('unitedstatesofamerica');
const nums = usa([10, 20, 30]);
nums.quotient();
Extending Prototype
require('unitedstatesofamerica').exposeProtos();
const nums = [10, 20, 30];
nums.quotient();
Mean
.mean() returns the average for an array. Note: This will return NaN if all items in an array are not numbers
Examples
Array USA Wrapper
const usa = require('unitedstatesofamerica');
const projectGrades = usa([90, 100, 80, 100, 100]);
const averageGrage = projectGrades.average();
Extending Prototype
require('unitedstatesofamerica').exposeProtos();
const projectGrades = [90, 100, 80, 100, 100];
const averageGrage = projectGrades.average();
Average
.average() is an alternate term for .mean()
Median
.median() returns the median of all items in the array
Examples
Array USA Wrapper
const usa = require('unitedstatesofamerica');
const nums = usa([10, 20, 30, 50, 100]);
nums.median();
Extending Prototype
require('unitedstatesofamerica').exposeProtos();
const nums = [10, 20, 30, 50, 100];
nums.median();
Mode
.mode() returns the mode of the array
Examples
Array USA Wrapper
const usa = require('unitedstatesofamerica');
const nums = usa([10, 20, 30, 50, 100]);
nums.mode();
Extending Prototype
require('unitedstatesofamerica').exposeProtos();
const nums = [10, 20, 20, 30, 50, 100];
nums.mode();
Replace
.replace() replaces all occurances of a specified value with a new value.
Parameters
oldVal (Any) - Value to replace
newVal (Any) - Replacement value
Examples
Array USA Wrapper
const usa = require('unitedstatesofamerica');
const arr = usa(['foo', 'bar', 'foobar', 'bar', 'foo']);
const noFoo = arr.replace('foo', 'baz');
Extending Prototype
require('unitedstatesofamerica').exposeProtos();
const arr = ['foo', 'bar', 'foobar', 'bar', 'foo'];
const noFoo = arr.replace('foo', 'baz');
Filter Type
.filterType() filters an array to only a specified type
Parameters
type (String) - String representing JS type
Possible Types
"string"
"number"
"boolean"
"undefined"
"symbol"
"function"
"object" - Returns all JS object types (objects, arrays, functions, null)
"array" - Returns only nested arrays
"null" - Returns only null values
"objectOnly" - Returns only objects without returning arrays
Examples
Array USA Wrapper
const usa = require('unitedstatesofamerica');
const arr = [1, 4, 't', ['nested', 8], { foo: 'bar' }, { baz: false }, [1, 2, 3], true, ''];
const mixed = usa(arr);
const strOnly = mixed.filterType('string');
const nestedArrsOnly = mixed.filterType('array');
Extending Prototype
require('unitedstatesofamerica').exposeProtos();
const mixed = [1, 4, 't', ['nested', 8], { foo: 'bar' }, { baz: false }, [1, 2, 3], true, ''];
const strOnly = mixed.filterType('string');
const nestedArrsOnly = mixed.filterType('array');
Types
.types() returns an array of the target array's types.
Examples
Array USA Wrapper
const usa = require('unitedstatesofamerica');
const mixed = usa([1, 4, 't', true, '']);
const types = mixed.types();
Extending Prototype
require('unitedstatesofamerica').exposeProtos();
const mixed = [1, 4, 't', true, ''];
const types = mixed.types();
To Array
.toArray() returns your ArrayUSA array as a standard JavaScript array;
Examples
Array USA Wrapper
const usa = require('unitedstatesofamerica');
const arr = [5, 1, 2, 2, 5, 3, 3, 4, 5];
const noDuplicates = usa(arr)
.withoutDuplicates()
.toArray();
noDuplicates.shuffle();
To Str
.toStr() returns an array of a string version of all the items in the array. Note: Conversion is different depending on type. For example, objects and arrays will be returned stringified.
Examples
Array USA Wrapper
const usa = require('unitedstatesofamerica');
const arr = [1, 4, 't', ['nested', 8], { foo: 'bar' }, { baz: false }, [1, 2, 3], true];
const mixed = usa(arr);
const strArr = mixed.toStr();
Extending Prototype
require('unitedstatesofamerica').exposeProtos();
const mixed = [1, 4, 't', ['nested', 8], { foo: 'bar' }, { baz: false }, [1, 2, 3], true];
const strArr = mixed.toStr();
To Num
.toNum() returns a new array with all items converted to numbers.
Parameters
base - Base to parse numbers to. (Defaults to 10)
Examples
Array USA Wrapper
const usa = require('unitedstatesofamerica');
const arr = ['1', 4, '3.2', '7', '19', 0];
usa(arr).toNum();
Extending Prototype
require('unitedstatesofamerica').exposeProtos();
const arr = ['1', 4, '3.2', '7', '19', 0];
arr.toNum();
Even Indexes
.evenIndexes() returns only the even index items in an array
Examples
Array USA Wrapper
const usa = require('unitedstatesofamerica');
const arr = ['foo', 'bar', 'baz', 'foobar'];
usa(arr).evenIndexes();
Extending Prototype
require('unitedstatesofamerica').exposeProtos();
const arr = ['foo', 'bar', 'baz', 'foobar'];
arr.evenIndexes();
Odd Indexes
.oddIndexes() returns only the odd index items in an array
Examples
Array USA Wrapper
const usa = require('unitedstatesofamerica');
const arr = ['foo', 'bar', 'baz', 'foobar'];
usa(arr).oddIndexes();
Extending Prototype
require('unitedstatesofamerica').exposeProtos();
const arr = ['foo', 'bar', 'baz', 'foobar'];
arr.oddIndexes();
Assert
.assert() does a deep compare on an array with any target array - Returning a boolean of if all values and nested values matched.
Examples
Array USA Wrapper
const usa = require('unitedstatesofamerica');
const a1 = [{ foo: 'bar', bar: 4, baz: false }, [4, 3, 2, 1], 'f', 0, true, 'i'];
const a2 = [{ foo: 'bar', bar: 4, baz: false }, [4, 3, 2, 1], 'f', 0, true, 'i'];
usa(a1).assert(a2);
const a3 = [{ foo: 'baz', bar: 4, baz: false, t: 4 }, [4, 3, 2, 1], 'j', 1, true, 'i'];
const a4 = [{ foo: 'bar', bar: 4, baz: false }, [4, 3, 2, 1], 'f', 0, true, 'i'];
usa(a3).assert(a4);
Extending Prototype
const usa = require('unitedstatesofamerica').exposeProtos();
const a1 = [{ foo: 'bar', bar: 4, baz: false }, [4, 3, 2, 1], 'f', 0, true, 'i'];
const a2 = [{ foo: 'bar', bar: 4, baz: false }, [4, 3, 2, 1], 'f', 0, true, 'i'];
a1.assert(a2);
const a3 = [{ foo: 'baz', bar: 4, baz: false, t: 4 }, [4, 3, 2, 1], 'j', 1, true, 'i'];
const a4 = [{ foo: 'bar', bar: 4, baz: false }, [4, 3, 2, 1], 'f', 0, true, 'i'];
a3.assert(a4);
To Object
.toObject() converts an array to an object, with specified keys and values for each item
Parameters
cb - OPTIONAL - Callback function called for each item in the array. Must return an object with a key key and a value key Note: Callback function is optional. It is not needed if every item in the array is an object with a key key and value key.
Callback Parameters
- Array item
- Item Index
- Array
Examples
Array USA Wrapper
Example 1: With Callback Function
const usa = require('unitedstatesofamerica');
const data = [
{ id: 'abc123', score: 97 },
{ id: 'def456', score: 82 },
{ id: 'hij789', score: 90 },
{ id: 'klm012', score: 78 },
];
const scores = usa(data).toObject((item) => ({ key: item.id, value: item.score }));
Example 2: Without Callback Function
const usa = require('unitedstatesofamerica');
const houseAttributes = [
{ key: 'sqFt', value: 2000 },
{ key: 'yearBuilt', value: 1998 },
{ key: 'bedrooms', value: 4 },
{ key: 'bathrooms', value: 2.5 },
];
const home = usa(houseAttributes).toObject();
Extending Prototype
Example 1: With Callback Function
const usa = require('unitedstatesofamerica').exposeProtos();
const data = [
{ id: 'abc123', score: 97 },
{ id: 'def456', score: 82 },
{ id: 'hij789', score: 90 },
{ id: 'klm012', score: 78 },
];
const scores = data.toObject((item) => ({ key: item.id, value: item.score }));
Example 2: Without Callback Function
const usa = require('unitedstatesofamerica');
const houseAttributes = [
{ key: 'sqFt', value: 2000 },
{ key: 'yearBuilt', value: 1998 },
{ key: 'bedrooms', value: 4 },
{ key: 'bathrooms', value: 2.5 },
];
const home = houseAttributes.toObject();