33 lines
812 B
Markdown
33 lines
812 B
Markdown
---
|
|
title: dig
|
|
tags: object,recursion,intermediate
|
|
---
|
|
|
|
Gets the target value in a nested JSON object, based on the given key.
|
|
|
|
- Use the `in` operator to check if `target` exists in `obj`.
|
|
- If found, return the value of `obj[target]`.
|
|
- Otherwise use `Object.values(obj)` and `Array.prototype.reduce()` to recursively call `dig` on each nested object until the first matching key/value pair is found.
|
|
|
|
```js
|
|
const dig = (obj, target) =>
|
|
target in obj
|
|
? obj[target]
|
|
: Object.values(obj).reduce((acc, val) => {
|
|
if (acc !== undefined) return acc;
|
|
if (typeof val === 'object') return dig(val, target);
|
|
}, undefined);
|
|
```
|
|
|
|
```js
|
|
const data = {
|
|
level1: {
|
|
level2: {
|
|
level3: 'some data'
|
|
}
|
|
}
|
|
};
|
|
dig(data, 'level3'); // 'some data'
|
|
dig(data, 'level4'); // undefined
|
|
```
|