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

如何高效过滤数据库返回JSON中以下划线开头的字段?

通用过滤下划线开头字段的方法

可以写一个递归遍历函数来自动过滤所有键名以下划线开头的字段,不管是顶层属性还是嵌套在多层对象里的,这样不用手动逐个删除,新增的私有字段也能自动处理。

实现通用过滤函数

这个函数会遍历对象的每一个属性:

  • 如果属性名以_开头,直接删除
  • 如果属性值是对象(且不是null),递归处理这个嵌套对象
  • 如果属性值是数组,遍历数组里的每个元素,递归处理每个元素(如果是对象的话)

代码如下:

function filterPrivateFields(obj) {
  // 处理数组:遍历每个元素,递归过滤
  if (Array.isArray(obj)) {
    return obj.map(item => filterPrivateFields(item));
  }
  // 处理对象:遍历每个键
  if (obj && typeof obj === 'object') {
    for (const key in obj) {
      // 删除下划线开头的键
      if (key.startsWith('_')) {
        delete obj[key];
      } else {
        // 递归处理嵌套对象
        filterPrivateFields(obj[key]);
      }
    }
  }
  return obj;
}

应用到你的代码中

把原来手动删除字段的部分替换成调用这个函数即可,修改后的完整代码:

// @see https://docs.aircode.io/guide/functions/
const {db} = require('aircode');

// 新增通用过滤函数
function filterPrivateFields(obj) {
  if (Array.isArray(obj)) {
    return obj.map(item => filterPrivateFields(item));
  }
  if (obj && typeof obj === 'object') {
    for (const key in obj) {
      if (key.startsWith('_')) {
        delete obj[key];
      } else {
        filterPrivateFields(obj[key]);
      }
    }
  }
  return obj;
}

module.exports = async function (params, context) {
    const table = db.table('persons');

    if(!(await table.where().findOne())) {
        const students = [];
        for(let i = 0; i < 100; i++) {
            students.push({
                name: `students${i}`, 
                score: Math.floor(Math.random() * 100), 
                info: {_private: 'something', public: {_foo: 'foo', bar: 'bar'}}
            });
        }
        await table.save(students);
    }
    const result = await table.where({score: db.gt(60)}).limit(10).find();
    
    // 调用过滤函数处理结果
    const filteredResult = filterPrivateFields(result);
    
    return {
     result: filteredResult,
    };
};

为什么这个方法更好?

  • 通用性强:不管新增多少个下划线开头的字段,不管嵌套多少层,都能自动过滤,不用修改代码
  • 可复用:这个函数可以抽出来放到工具文件里,整个项目的类似需求都能用
  • 效率更高:一次遍历处理所有情况,不用手动写多个delete语句

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 00:12:53