Hone logo
Hone
Problems

Get Object Property by Path in JavaScript

Many applications require accessing deeply nested properties within JavaScript objects. Instead of chaining multiple property accessors (e.g., object.level1.level2.property), it's often more convenient and robust to use a path string to specify the property to retrieve. This challenge asks you to implement a function that takes an object and a path string and returns the value at that path, handling potential errors gracefully.

Problem Description

You need to write a JavaScript function called getNestedProperty that accepts two arguments: an object (obj) and a path string (path). The path string will consist of property names separated by dots (.). The function should traverse the object based on the path and return the value of the property at the end of the path.

Key Requirements:

  • Path Traversal: The function must correctly navigate the object based on the provided path string.
  • Error Handling: If any part of the path does not exist in the object, the function should return undefined. This includes cases where an intermediate property in the path is null or undefined.
  • String Path: The path argument should be a string.
  • Return Value: The function should return the value of the property at the end of the path, or undefined if the path is invalid.

Expected Behavior:

The function should return the value at the specified path. If any property in the path is missing, it should return undefined.

Edge Cases to Consider:

  • Empty path string: Should return undefined.
  • Path with a single property: Should return the value of that property if it exists.
  • Path with multiple nested properties.
  • Object properties that are null or undefined.
  • Path containing invalid characters (although the problem doesn't explicitly require validation, consider how your solution handles them).

Examples

Example 1:

Input: obj = { a: { b: { c: 1 } } }, path = "a.b.c"
Output: 1
Explanation: The function traverses the object from 'a' to 'b' to 'c' and returns the value 1.

Example 2:

Input: obj = { a: { b: { c: 1 } } }, path = "a.b.d"
Output: undefined
Explanation: The property 'd' does not exist within the 'b' object, so the function returns undefined.

Example 3:

Input: obj = { a: { b: null } }, path = "a.b.c"
Output: undefined
Explanation: The property 'b' is null.  Accessing 'c' on a null value results in undefined.

Example 4:

Input: obj = { a: 1 }, path = ""
Output: undefined
Explanation: An empty path should return undefined.

Constraints

  • The obj argument will always be a JavaScript object or null.
  • The path argument will always be a string.
  • The path string will contain only alphanumeric characters and dots (.).
  • The function should execute in a reasonable time (O(n) where n is the length of the path).

Notes

Consider using the split() method to break the path string into an array of property names. You can then iterate through the array, accessing each property in turn. Remember to handle the case where a property is null or undefined gracefully. Think about how to avoid errors when accessing properties that don't exist.

Loading editor...
javascript