npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2025 – Pkg Stats / Ryan Hefner

array-to-dictionary

v1.0.1

Published

Convert Javascript/JSON arrays to dictionaries

Readme

Array to Dictionary

Why?

Working with lists of data can add unnecessary complexity to operations, both in the code the developer has to write, and in the operations the computer has to perform.

Dictionaries provide a simpler interface to access and modify data.

For example:

Using arrays:

We have an array containing user objects, each with an id and a name. Finding a single user looks something like this:

const theIdToFind = 123;
const found = list.find(user => user.id === theIdToFind);

If user 123 were the last member of the list, we'd iterate the whole list to find this user.

Changing a user's name looks something like this:

const theIdToChange = 123;
const newName = 'Jonathan Smith';
const listWithChangedName = list.map(user => {
  if (user.id !== theIdToChange) {
    return user;
  }
  return Object.assign(
    {},
    user,
    { name: newName }
  );
});

There are various ways to do this, many even more cumbersome than the above to write for the developer. With this method, we have to iterate the entire list to change one value.

Using dictionaries:

We iterate the array once to create a dictionary, then we can use the dictionary for operations on single members of the list without any further iteration. This makes the code easier to write and operations easier on the processor.

const theIdToFind = 123;
const found = dictionary[theIdToFind];
const theIdToChange = 123;
const newName = 'Jonathan Smith';
dictionary[theIdToChange] = Object.assign(
  {},
  dictionary[theIdToChange],
  { name: newName }
);

Installation

npm install --save array-to-dictionary

or

yarn add array-to-dictionary

Usage

import arrayToDictionary from 'array-to-dictionary';

const myList =  [
  {
    id: 'abc',
    flavor: 'vanilla',
  },
  {
    id: 'def',
    flavor: 'chocolate',
  },
  {
    id: 'ghi',
    flavor: 'strawberry',
  },
  {
    id: 'jkl',
    flavor: 'astronaut',
  },
];

const myDictionary = arrayToDictionary(myList);

// myDictionary:
{
  abc: {
    flavor: "vanilla",
    id: 'abc',
  },
  def: {
    flavor: "chocolate",
    id: 'def',
  },
  ghi: {
    flavor: "strawberry",
    id: 'ghi',
  },
  jkl: {
    flavor: "astronaut",
    id: 'jkl',
  },
}

arrayToDictionary(array, [options])

parameter array (required)

Array to be converted to a dictionary. Must be an array whose members are objects with unique values at key id or other user-defined key (see options).

parameter options (optional) { indexKey, transformValues }

Object containing either or both of these keys:

indexKey (string)

Default: "id"

key to use as index for the created dictionary. Must be unique for each member of the array.

const businessList = [
  {
    businessId: 'abc123',
    name: 'making money',
  },
  {
    businessId: 'def456',
    name: 'making more money',
  },
  {
    businessId: 'ghi789',
    name: 'making the most money',
  },
];
arrayToDictionary(businessList, { indexKey: 'businessId' });

transformValues (function)

Default: none

Executed on each member of the list before it's set in the dictionary

const thingsToEnhance = [
  {
    id: 'a',
    name: 'bike',
  },
  {
    id: 'b',
    name: 'wagon',
  },
  {
    id: 'c',
    name: 'skateboard',
  },
];
const enhance = thing => ({
  ...thing,
  description: `An amazing ${thing.name}`,
});
const enhancedThings = arrayToDictionary(thingsToEnhance, {
  transformValues: enhance,
});

//enhancedThings
{
  a: {
    id: 'a',
    name: 'bike',
    description: 'An amazing bike',
  },
  b: {
    id: 'b',
    name: 'wagon',
    description: 'An amazing wagon',
  },
  c: {
    id: 'c',
    name: 'skateboard',
    description: 'An amazing skateboard',
  },
}

A more robust alternative:

normalizr:

Normalizr is a more feature-rich way to create dictionaries from arrays. Nested objects are broken out into dictionaries according to a user-defined schema. A great alternative that requires a bit more buy-in.