Walk through object
JavaScript, Object, Recursion, Generator · Nov 15, 2021

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 andObject.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 currentkey
to the array of keys. Otherwise,yield
an array of keys representing the current path and the value of the givenkey
. - Use the
yield*
expression to delegate to thewalk
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] ] */