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

如何编写递归方法过滤嵌套数组对象特定数据?当前实现输出异常

解决方案:递归筛选指定数据类型

正确实现代码

const _ = require('lodash');

function filterTargetData(data) {
  // 处理数组:递归筛选每个元素,仅保留符合条件的结果
  if (_.isArray(data)) {
    const filteredItems = data
      .map(item => filterTargetData(item))
      .filter(item => item !== undefined);
    // 空数组直接丢弃,否则返回筛选后的数组
    return filteredItems.length > 0 ? filteredItems : undefined;
  }

  // 处理普通对象(排除数组)
  if (_.isObject(data)) {
    const resultObj = {};
    _.each(data, (value, key) => {
      const processedValue = filterTargetData(value);
      // 保留两种情况:处理后有有效结果,或当前值是基本类型(非对象/数组)
      if (processedValue !== undefined || !_.isObject(value)) {
        resultObj[key] = processedValue ?? value;
      }
    });

    // 两种情况保留该对象:处理后有属性,或原对象本身只有单个属性
    const shouldKeep = _.size(resultObj) > 0 || _.size(data) === 1;
    return shouldKeep ? resultObj : undefined;
  }

  // 基本类型直接返回
  return data;
}

// 测试用例
const userParticalData = {
    student: {
        id: 1,
        name: 'sankhnad',
        mobile: 1111111111
    },
    resultId: 1,
    address: [
        {
            id: 1,
            state: 'delhi',
            pin: 102202
        },
        {
            id: 2
        },
        {
            id: 3,
            aname: 'assam',
            pin: 102202
        }
    ],
    streem: [
        {
            id: 1,
            state: 'CA',
            place: 'campus'
        }
    ]
};

const output = filterTargetData(userParticalData);
console.log(output);

现有代码的问题分析

  1. 直接修改原始数据:你的代码通过delete initialData[rootKey]直接修改输入对象,不仅会污染原始数据,还会导致数组等复杂结构的处理逻辑混乱。
  2. 数组处理逻辑缺失:递归处理数组时,没有对数组内的元素进行筛选,也没有将筛选后的结果替换回原数组,导致address数组里的符合条件元素没被保留。
  3. 类型判断不准确:_.isObject会将数组判定为对象,你的条件没有区分数组和普通对象,导致数组被误判为需要删除的多属性对象。

正确逻辑说明

  1. 区分数组与普通对象:优先处理数组,遍历每个元素递归筛选,空数组直接丢弃。
  2. 对象筛选规则:遍历对象属性,仅保留符合条件的属性;同时如果原对象只有单个属性,无论值是什么都保留(满足“不完整对象”的要求)。
  3. 基本类型直接保留:所有非对象/数组的基本类型值直接保留。
  4. 无副作用处理:全程构建新的对象/数组,不修改原始输入数据,保证数据纯净性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 08:25:31