eachize

0.2.0 • Public • Published

eachize Build Status Coverage Status Dependency Status

mixin iteration functions

Guide

Basic usage

eachize provides iteration functions like Array.prototype.forEach() to a container instance.

we assume an Album class defined as below:

var Album = function() {
  this.init();
};
Album.prototype.init = function() {
  this.photos = {
    first: {
      id: 'p01',
      title: 'first',
      image: ' photo1'
    },
    second: {
      id: 'p02',
      title: 'second',
      image: 'photo2'
    }
  };
  this.photosByTitle = this.photos;
  this.categories = {
    portrait: 'human',
    landscape: 'nature'
  };
};

if we use eachize, we can use iteration functions eachPhoto() and eachCategory() with instances of Album class.

var eachize = require('eachize').;
eachize(Album, 'photo,category');
 
var album = new Album();
album.eachPhoto(function(photo, key) {
  console.log(key, photo);
})

Use an iteration function with three functions as arguments

for convinience, eachize iteration functions can takes three functions as arguments, like below:

var report = album.eachCategory(
  function() { return { str: '[:' }; },
  function(category, key, ctx, x_album) {
    ctx.str += '(' + key + ':' + category + '):';
  },
  function(ctx) { return ctx.str + ']' ; });
  • the first function : is the initializing function. the return value of this function is used as the context of the iteration.
  • the second functin : is an iteration function. the third argument of this function is the context.
  • the third function : is the finalizeing function. the argument of this function is the context. and, the return value of this function is the return value of the outer function, in this case it is eachCategory().

Specify keys for a container

you can specify two or more keys for a container.

eachize(Album, 'photo(title,id),category');

in this case, the two keys named title and id are specified for the container protos. and, you can specify the key as a first argument, like below:

album.eachPhoto('title' func); // with album.photosByTitle
album.eachPhoto('id' preFunc, mainFunc, postFunc);
  // with album.photsoById

you can use a population function.

album.populateEachPhoto('title', 'id');
console.log(album.photosById);
/*--*
 {
  p01: {
    id: 'p01',
    title: 'first',
    image: ' photo1'
  },
  p02: {
    id: 'p02',
    title: 'second',
    image: 'photo2'
  }
 *--*/ 

For a plain hash

you can use eachize for simple/plain hashes, like as below:

var albums = {
  trip: { name: 'trip1'  },
  job: { name: 'job1'  }
};
 
var report = eachize(albums)(
  function() { return { str: '[:' }; },
  function(album, key, ctx, x_albums) {
    ctx.str += '(' + key + ':' + album.name + '):';
  },
  function(ctx) { return ctx.str + ']'; }
);

Release History

License

Copyright (c) 2015 Takeyuki Kojima Licensed under the MIT license.

Readme

Keywords

none

Package Sidebar

Install

npm i eachize

Weekly Downloads

1

Version

0.2.0

License

MIT

Last publish

Collaborators

  • unau