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

使用Lodash遍历对象并将子对象转换为数组追加的最优方案

使用Lodash深度遍历对象并转换子对象为数组的最优方案

嘿,针对你提出的需求——深度遍历对象,把所有遇到的子对象转成数组并追加到结果里,我整理了一个基于Lodash的高效实现方案,完全适配你给出的测试对象结构:

核心思路

我采用了递归+Lodash工具方法的组合,核心逻辑很清晰:

  • 遍历对象的每一个属性值,用_.isPlainObject判断是不是纯JS对象
  • 一旦确认是子对象,就用_.toArray把它转成数组,直接把元素追加到结果数组里
  • 递归处理每个子对象的嵌套属性,确保哪怕是深层嵌套的对象也不会被漏掉

完整代码实现

const _ = require('lodash');

const flattenNestedObjects = (obj) => {
  let result = [];
  
  // 遍历当前对象的所有属性值
  _.forEach(obj, (value) => {
    if (_.isPlainObject(value)) {
      // 把当前子对象转成数组,直接追加元素到结果
      result.push(..._.toArray(value));
      // 递归处理子对象里的嵌套内容
      result.push(...flattenNestedObjects(value));
    }
  });
  
  return result;
};

// 补全你提供的测试对象
let testObj = { 
  'name': 'testdata', 
  'active': false, 
  'nestedData': { 
    0: { 
      0: { 'name': '1', 'value': 1 }, 
      1: { 'name': '2', 'value': 1 }, 
      2: { 'name': '3', 'value': 1 }, 
      3: { 'name': '4', 'value': 1 }, 
    }, 
    1: { 
      0: { 'name': '5', 'value': 1 }, 
      1: { 'name': '6', 'value': 1 }, 
      2: { 'name': '7', 'value': 1 }, 
      3: { 'name': '8', 'value': 1 }
    }
  }
};

// 执行函数查看结果
const finalResult = flattenNestedObjects(testObj);
console.log(finalResult);

代码细节说明

  • _.isPlainObject:这个方法能帮我们精准识别普通JS对象,避免误处理数组、DOM元素或者其他特殊对象
  • _.toArray:对于你测试对象里那种以数字为键的类数组对象,它会按顺序把属性值转成数组,完美符合你的需求
  • 递归遍历:不管你的对象嵌套多少层(比如testObj.nestedData.0.0这种深层结构),都能被处理到
  • 扩展运算符push(...):直接把数组元素追加到结果里,省去了额外的数组合并步骤,效率更高

可选优化:只处理类数组对象

如果你的需求里,只需要转换键为连续数字的类数组对象(而不是所有子对象),可以加个判断函数过滤一下:

// 判断是否为键连续的类数组对象
const isArrayLikeObject = (obj) => {
  const keys = _.keys(obj);
  return keys.every((key, idx) => Number(key) === idx);
};

// 修改forEach里的判断逻辑
if (_.isPlainObject(value) && isArrayLikeObject(value)) {
  result.push(..._.toArray(value));
  result.push(...flattenNestedObjects(value));
}

这样就能只处理像testObj.nestedData.0这种结构的对象,而不会处理testObj本身或者testObj.nestedData这类普通对象。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:21:28