lineral

0.3.1 • Public • Published

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']

Readme

Keywords

Package Sidebar

Install

npm i lineral

Weekly Downloads

1

Version

0.3.1

License

ISC

Last publish

Collaborators

  • nianpeng