Files
30-seconds-of-code/snippets/js/s/walk-through-object.md
Angelos Chalaris 9d032ce05e Rename js snippets
2023-05-19 20:23:47 +03:00

1.5 KiB

title, type, language, tags, author, cover, dateModified
title type language tags author cover dateModified
Walk through object snippet javascript
object
recursion
generator
chalarangelo bridge 2021-11-15T13:18:18+02:00

Creates a generator, that walks through all the keys of a given object.

  • Use recursion.
  • Define a generator function, walk, that takes an object and an array of keys.
  • Use a for...of loop and Object.keys() to iterate over the keys of the object.
  • Use typeof to check if each value in the given object is itself an object.
  • If so, use the yield* expression to recursively delegate to the same generator function, walk, appending the current key to the array of keys. Otherwise, yield an array of keys representing the current path and the value of the given key.
  • Use the yield* expression to delegate to the walk generator function.
const walkThrough = function* (obj) {
  const walk = function* (x, previous = []) {
    for (let key of Object.keys(x)) {
      if (typeof x[key] === 'object') yield* walk(x[key], [...previous, key]);
      else yield [[...previous, key], x[key]];
    }
  };
  yield* walk(obj);
};
const obj = {
  a: 10,
  b: 20,
  c: {
    d: 10,
    e: 20,
    f: [30, 40]
  },
  g: [
    {
      h: 10,
      i: 20
    },
    {
      j: 30
    },
    40
  ]
};
[...walkThrough(obj)];
/*
[
  [['a'], 10],
  [['b'], 20],
  [['c', 'd'], 10],
  [['c', 'e'], 20],
  [['c', 'f', '0'], 30],
  [['c', 'f', '1'], 40],
  [['g', '0', 'h'], 10],
  [['g', '0', 'i'], 20],
  [['g', '1', 'j'], 30],
  [['g', '2'], 40]
]
*/