jstructs
v0.2.3
Published
JStructs is a Ruby-like Struct factory for JavaScript
Downloads
9
Maintainers
Readme
JStructs
Structs for JavaScript, yay!!
A Ruby-like Struct factory for JavaScript
Installation
npm install jstructs [--save]
or
yarn install jstructs
Usage
const Struct = require('jstructs');
const Contact = Struct('name', 'email', 'phone');
const bob = new Contact('Bob', '[email protected]', 7779311);
const alice = new Contact('Alice', '[email protected]', 8675309);
alice.equal(bob);
=> true // only compares properties
alice.deepEqual(bob);
=> false // compares properties and values
alice.each(function(value) {
console.log(value);
});
=> 'Alice'
=> '[email protected]'
=> 8675309
bob.eachPair(function(name, value) {
console.log(name, '=>', value);
});
=> name => Bob
=> email => [email protected]
=> phone => 7779311
alice.length();
=> 3
alice.properties();
=> ['name', 'email', 'phone']
bob.values();
=> ['Bob', '[email protected]', 7779311]
bob.valuesAt(0, 2, 5);
=> ['Bob', 7779311, undefined]
bob.valuesAt(0, 2, 5, true);
=> ['Bob', 7779311] // last value of true will remove falsey values
alice.select(function(value) {
return typeof value === 'number';
});
=> [8675309]
alice.toArray();
// returns arrays of key value pairs
=> [['name', 'Alice'], ['email', '[email protected]'], ['phone', 8675309]]
bob.toObject();
// creates a new object from key value pairs
=> {
'name': 'Bob',
'email': '[email protected]',
'phone': 8675309
}
Unlike Ruby Structs, you can pass in more arguments than there are properties.
const Struct = require('jstructs');
const Numbers = Struct('pi', 'e', 'chaos', 'catchall');
const numbers = new Numbers(3.1415, 2.71828, 4.6692, 1.6180, -273.15, 6.71 * Math.pow(10, 8));
numbers.values();
=> [3.1415, 2.71828, 4.6692, [1.618, -273.15, 671000000]]
numbers.catchall;
=> [1.618, -273.15, 671000000]
You must pass at least one argument.
const Struct = require('jstructs');
const fail = Struct();
=> Error