Giter Club home page Giter Club logo

multi-index's Introduction

multi-index

Introduction

The motivation behind this tiny module is simple: Often I have a list of objects which I index and/or group by several keys into maps for quick lookups, for example:

var usersList = [
    { id:'1', uid: 'A', name: 'Dan', role: 'sales', floor: 2 },
    { id:'2', uid: 'B', name: 'Sara', role: 'sales', floor: 3 },
    { id:'3', uid: 'C', name: 'Pat', role: 'manager', floor: 3 },
];

var usersById = _.indexBy(usersList, 'id');
var usersByRole = _.groupBy(usersList, 'role');

usersById['1'].name.should.be.equal('dan')
usersByRole['developer'][0].name.should.be.equal('dan')

This works, but becomes tedious due to the need to refresh the index maps whenever the list changes. Enter MultiIndexList: a minimal data structure with a list at its core, but which provides index and group maps for quick lookups, updates and removals in the list. With MultiIndexList you can do:

var users = new MultiIndexList(userList)
    .indexBy('id', 'uid')
    .groupBy('role', 'floor');

var pat = users.by('id').get('3');
var sara = users.by('uid').get('B');
var sales = users.by('role').get('sales');
var floor3 = users.by('floor').get(3);

pat.name.should.be.equal('Pat');
sara.name.should.be.equal('Sara');
sales.length.should.be.equal(2);
sales[0].name.should.be.equal('Dan');
floor3.length.should.be.equal(2);
floor3[0].should.be.exactly(usersList[1]);

multi-index's People

Contributors

dandelany avatar

Watchers

 avatar James Cloos avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.