Merge objects

Merge two arrays

Use the spread operator to combine two arrays.

var x = [4, 5, 6];
var y = [1, 2, 3, ...x];
// [1, 2, 3, 4, 5, 6]

Merge two associative arrays

Use the spread operator.

var x = {d: 1, e: 2, f: 3};
var y = {a: 1, b: 2, c: 3, ...x};
// {a: 1, b: 2, c: 3, d: 1, e: 2, f: 3}

Add to an associative array

You can use this shorthand to put an associative array in another, using the name of the variable as the key.

var x = {d: 1, e: 2, f: 3};
var z = {u: 200, x};
// { u: 200, x: {d: 1, e: 2, f: 3} }

You can use this with other types.

var a = [1, 2, 3];
var b = { a };
// { a: [1, 2, 3] }

var c = 1000;
{ c }
// { c: 1000 }

Unpack an array

var myArray = [
  "a",
  "b",
  "c",
]

for (const [ index, value ] of Object.entries(myArray)) {
  console.log(index, value)
}
// 0 a
// 1 b
// 2 c

// OR using forEach. Note index and value switch places.
myArray.forEach((value, index) => {
  console.log(index, value)
})

Unpack an associative array

Get key-value pairs with a for loop

Warning - the order is not guaranteed.

const pairs = {
  foo: 'A',
  bar: 'B',
  baz: 'C'
}

Object.entries(pairs)
// [ [ 'foo', 'A' ], [ 'bar', 'B' ], [ 'baz', 'C' ] ]

for (const [ key, value ] of Object.entries(pairs)) {
  console.log(`${key} - ${value}`)
}

// foo - A
// bar - B
// baz - C

Or, instead of for, using map.

Object.entries(pairs)
  .map((x) => `${x[0]} - ${x[1]}`)
// [
//   'foo - A', 
//   'bar - B', 
//   'baz - C'
// ]

Note that x is a tuple.

If you use two parameters, you’ll end up with the key and value in the first and the index (like 0) in the second.

Sort

To sort first, before using for or map.

Object.entries(obj)
  .sort((a, b) => b[0].localeCompare(a[0]));

From Object.entries in MDN docs.

Merge associative arrays

Here we unpack each of the values in x into a new associative array y, keeping them as before but merging with other values such as c: 3.

const x = {
    a: 1, 
    b: 2
}

const y = {
    ...x,
    c: 3
}

y
// { a: 1, b: 2, c: 3 }

Note use of ... spread operator above. If you omit that, then x becomes the key in the new object, with keys a and b intact within that.

const z = {
    x,
    c: 3
}

// { x: { a: 1, b: 2 }, c: 3 } 

If you want to merge two objects:

const x = {
    a: 1, 
    b: 2
}
const y = {
    b: 100,
    c: 3, 
    d: 4
}

const z = {
  ...x,
  ...y,
}
z
// { a: 1, b: 100, c: 3, d: 4 } 

Note evaluation is top to bottom. Regardless of if using a value or an object, the second one takes preference.

Here we have x second, so the value of b is used.

const z = {
  ...y,
  ...x,
}

z
// { b: 2, c: 3, d: 4, a: 1 } 

Invert an associative array

var pairs = {
  foo: 'A',
  bar: 'B',
  baz: 'C'
}

let output = {};
for (const [ key, value ] of Object.entries(pairs)) {
  output[value] = key;
}