to-obj

Array/object to object converter

Usage no npm install needed!

<script type="module">
  import toObj from 'https://cdn.skypack.dev/to-obj';
</script>

README

to-obj

Supersmall array/object to plain old javascript object converter. Compatible with CommonJS / SystemJS / AMD.

Install

npm install --save to-obj

Object from Array

Like Object.assign({}, array):

const arr = ['a', 'b'];
toObj(arr); // { 0: 'a', 1: 'b' }

With value provided:

const arr = ['a', 'b'];
toObj(arr, 'value');    // { a: 'value', b: 'value' }
toObj(arr, undefined);  // { a: undefined, b: undefined }

With values from array:

const arr = ['a', 'b'];
toObj(arr, [1, 2]);     // { a: 1, b: 2 }

With transformer function:

const arr = ['a', 'b'];
const transformer = (value, index) => value + '-' + index;
toObj(arr, transformer); // { a: 'a-0', b: 'b-1' }

Object from athother object

Returns shallow copy of given object:

const obj = { a: 3, b: 4 };
const newObject = toObj(obj);
newObject;       // { a: 3, b: 4 }
obj === newObj;  // false

With value provided:

const obj = { a: 3, b: 4 };
toObj(obj, 'something'); // { a: 'something', b: 'something' }

With transformer function:

const obj = { a: 3, b: 4 };
const transformer = (value, key) => key + '-' + value;
toObj(obj, transformer); // { a: 'a-3', b: 'b-4' }

Also works with object-like values:

const func = function() {};
func.test = 1;
func.t = 2;
toObj(func);       // { test: 1, t: 2 }
toObj(func, null); // { test: null, t: null }

toObj.byKey

If you have array of users:

const users = [
  { id: 111, name: 'bob' },
  { id: 222, name: 'den' },
];

and you want to convert it to dictionary of users by id, just provide key or function returning key:

const toObjById = toObj.byKey((user, index) => user.id);

// Or (shortcut):
const toObjById = toObj.byKey('id');

toObjById(users); // {
                  //   111: { id: 111, name: 'bob' },
                  //   222: { id: 222, name: 'dan' }
                  // }

This works as described before, for example, lets take object of users:

const users = {
  z: { id: 111, name: 'bob' },
  x: { id: 222, name: 'den' },
};

// second argument does the same thing described in “With transformer function”:
toObjById(users, user => user.name); // {
                                     //   111: 'bob',
                                     //   222: 'dan',
                                     // }