MST

星途 面试题库

面试题:JavaScript闭包与递归函数复杂场景应用

假设有一个多层嵌套的对象,结构类似{ a: { b: { c: { d: 1 } } } },你需要用递归函数实现根据传入的键名路径,如['a', 'b', 'c', 'd']获取对应的值。并且在这个过程中,利用闭包封装递归函数,避免全局变量的污染,描述实现思路并写出具体代码。
24.8万 热度难度
编程语言JavaScript

知识考点

AI 面试

面试题答案

一键面试

实现思路

  1. 利用闭包封装递归函数,在外部定义一个函数,在该函数内部返回真正的递归函数,这样可以避免全局变量污染。
  2. 递归函数接收对象和键名路径数组作为参数。
  3. 在递归函数中,首先检查路径数组是否为空,如果为空则返回对象本身。
  4. 取出路径数组的第一个键名,检查对象是否存在该键名且该键值为对象,若满足则递归调用函数处理剩余路径,否则返回 undefined

代码实现

function createGetter() {
    function getValueByPath(obj, path) {
        if (path.length === 0) {
            return obj;
        }
        const key = path[0];
        if (obj && typeof obj === 'object' && key in obj) {
            return getValueByPath(obj[key], path.slice(1));
        }
        return undefined;
    }
    return getValueByPath;
}

// 使用示例
const getter = createGetter();
const obj = { a: { b: { c: { d: 1 } } } };
const path = ['a', 'b', 'c', 'd'];
console.log(getter(obj, path));