You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在原生JavaScript中基于数组构建对象属性访问器

不用Lodash实现嵌套属性访问

你可以用原生JavaScript的Array.reduce方法来实现,这是最简洁且安全的方式:

方法一:使用reduce + 可选链(推荐)

这种方法能自动处理路径不存在的情况,避免抛出错误:

const props = ["category", "category_name"];
const obj = {
  category: {
    category_name: "some name",
  }
};

const getNestedValue = (targetObj, pathArr) => {
  return pathArr.reduce((currentLayer, key) => {
    // 可选链?.确保中间层不存在时返回undefined,不会报错
    return currentLayer?.[key];
  }, targetObj);
};

// 调用示例
console.log(getNestedValue(obj, props)); // 输出: "some name"

方法二:递归实现(适合理解原理)

如果想手动实现递归逻辑,也可以这么写:

const getNestedValueRecursive = (targetObj, pathArr) => {
  // 路径为空时返回当前对象
  if (pathArr.length === 0) return targetObj;
  // 解构出第一个路径项和剩余路径
  const [firstKey, ...restPath] = pathArr;
  // 如果当前层存在该属性,继续递归,否则返回undefined
  return targetObj?.[firstKey] ? getNestedValueRecursive(targetObj[firstKey], restPath) : undefined;
};

console.log(getNestedValueRecursive(obj, props)); // 输出: "some name"

简化版(无错误处理)

如果能确保路径一定存在,可以用更短的写法,但路径不存在时会抛出TypeError,不推荐在生产环境用:

const getValueSimple = (targetObj, pathArr) => pathArr.reduce((curr, key) => curr[key], targetObj);

内容的提问来源于stack exchange,提问作者supersize

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 04:55:29