0.3.1 • Published 8 years ago
lineral v0.3.1
Lineral.js
A light-weight helper to access nested properties of JavaScript objects.
Usage
The main purpose of this library is to avoid writing protective code like this:
if (myObj && myObj.keyA && myObj.keyA.keyB && ...) {
const valueX = myObj.keyA.keyB...;
// move on with the presence of valueX;
} else {
// handle it without valueX;
}
With lineral
here is what you do
import L from "lineral";
const valueX = L(myObj, 'keyA.keyB.keyC...'); // returns either a value or null
It either returns the value by following through the keys, or returns null
if the key-path doesn't exist or is invalid at some point.
lineral
also works with arrays. Instead of passing the property name, you now pass the index value surrounded by []
:
const myObj = { foo: ['zero', 'one', { 'two': 'bar' }] };
L(myObj, 'foo.[0]'); // => 'zero'
L(myObj, 'foo.[2].two'); // => 'bar'
L(myObj, 'foo.[10].two'); // => null
Currying
Yes, lineral
supports currying.
const myObj = { foo: ['zero', 'one', { 'two': 'bar' }] };
const myL = L(myObj);
myL('foo'); // => ['zero', 'one', { 'two': 'bar' }]
myL('foo.[0]'); //=> 'zero'
Install
npm install lineral
Bundle size: 572B
More Examples
Assume you have a JavaScript object like this:
// object article
{
"headline": {
text: 'hello world',
markup: '<strong>hello</strong> world'
},
"publishedAt": "2016-04-01T12:46:12"
"authors": [
{
"firstName": "first0",
"lastName": "last0",
"images": [
{
"size": "1x",
"src": "the-1x-image.png",
},
{
"size": "2x",
"src": "the-2x-image.png",
}
]
...
},
{
"firstName": "first1",
"lastName": "last1",
"images": undefined,
...
}
]
}
Here is how can you access the nested values using lineral
:
import L from 'lineral';
const l = L(article);
const headline = l('headline.text');
// Yes, you still have to check if headline === null before you use it.
// But it's much more concise than having to check the entire path
const authorImages = l('authors')
.map(author => L(author, 'images.[0].src'))
.filter(imageSrc => imageSrc != null);
// => ['the-1x-image.png']