如何在lowdb中过滤/移除空对象
如何从lowdb中移除空对象
嘿,很高兴能帮你解决这个问题!针对你这个包含多个空对象的posts数组,我们可以利用lowdb内置的工具或者原生JS方法快速过滤掉这些空对象,下面是具体的实现步骤和代码示例:
解决方案思路
核心逻辑就是过滤数组,只保留那些非空的对象。判断空对象有两种简单方式:
- 用lowdb自带的Lodash工具方法
_.isEmpty()(不用额外安装依赖) - 用原生JS的
Object.keys(obj).length > 0判断对象是否包含属性
代码示例(lowdb v3+ 主流版本)
这是当前lowdb的标准写法:
import { Low } from 'lowdb' import { JSONFile } from 'lowdb/node' // 初始化数据库连接 const adapter = new JSONFile('db.json') const db = new Low(adapter) // 先读取数据库中的现有内容 await db.read() // 过滤posts数组里的空对象 // 方法1:用Lodash的isEmpty方法(推荐,代码更简洁) db.data.posts = db.data.posts.filter(post => !_.isEmpty(post)) // 方法2:用原生JS判断(不依赖Lodash) // db.data.posts = db.data.posts.filter(post => Object.keys(post).length > 0) // 一定要调用write(),才能把修改保存到文件里! await db.write()
代码示例(lowdb v2 旧版本)
如果你还在使用低版本的lowdb,写法会稍有不同:
const low = require('lowdb') const FileSync = require('lowdb/adapters/FileSync') const adapter = new FileSync('db.json') const db = low(adapter) // 链式调用完成过滤并直接保存 db.set('posts', db.get('posts').filter(post => !_.isEmpty(post)).value()).write()
验证结果
执行完上述代码后,你的posts数组会变成:
[ { "name": "hello" }, { "name": "good" }, { "name": "foo" } ]
所有空对象都被成功移除啦!
内容的提问来源于stack exchange,提问作者user179981
相关产品推荐
相关产品推荐

