walkThrough
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...ofloop andObject.keys()to iterate over the keys of the object. - Use
typeofto 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 currentkeyto the array of keys. Otherwise,yieldthe an array of keys representing the current path and the value of the givenkey. - Use the
yield*expression to delegate to thewalkgenerator 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]
]
*/