diff --git a/snippets/dig.md b/snippets/dig.md index 6790d363a..897ba3760 100644 --- a/snippets/dig.md +++ b/snippets/dig.md @@ -2,19 +2,22 @@ Return the value in a nested JSON object by the key. -Given the key name (or target), it will map through each key in the object and look for object type. +Given the key name (or target), it will loop through each key/value in the object and look for object type. If value is an object, dig is called recusively until the first matching key/value is found. ``` -const dig = (obj, target) => { - return obj[target] ? - obj[target] : - Object.keys(obj).map(key => { - if (typeof(obj[key]) === "object") { - return dig(obj[key], target); - } - }).filter(defined=>defined)[0] -}; +const dig = (obj, target) => + target in obj + ? obj[target] + : Object + .values(obj) + .reduce((acc, val) => { + if (acc !== undefined) return acc; + if (typeof val === 'object') { + const v = dig(val, target); + return v === undefined ? undefined : v; + } + }, undefined); ``` ```