使用Node.js如何从一个单独的配置文件中筛选JSON文档,该文件包含一个数组或对象,其中包含要保留的键?

使用Node.js如何从一个单独的配置文件中筛选JSON文档,该文件包含一个数组或对象,其中包含要保留的键?,node.js,json,config,Node.js,Json,Config,假设我有一个JSON对象,如下所示: {“first”:”first value”, “second”:”second value”, “third”:”third value”} 我有一个如下的配置文件作为示例: {“filterList”: {“first”: true, “second”: false, “third”: true}} 我想使用配置列表过滤掉假键并保留真键。配置结构只是一个示例,如果有更好的解决方案,我可以更改它。 如何在最佳实践中实现这一点?我们可以使用require

假设我有一个JSON对象,如下所示:

{“first”:”first value”,
“second”:”second value”,
“third”:”third value”}
我有一个如下的配置文件作为示例:

{“filterList”:
{“first”: true,
“second”: false,
“third”: true}}
我想使用配置列表过滤掉假键并保留真键。配置结构只是一个示例,如果有更好的解决方案,我可以更改它。
如何在最佳实践中实现这一点?

我们可以使用require(“文件名”)或JSON.parse(fs.readFileSync(文件“utf8”)加载配置文件,然后使用它使用object.entries和Array.reduce过滤对象,如下所示:

让configFile=
{
“过滤器列表”:{
“第一”:对,
“第二”:假,
“第三”:正确
}
}
常量originalObj=
{
“第一”:“第一个值”,
“第二个”:“第二个值”,
“第三”:“第三价值”
}
log({originalObj});
const filteredObj=Object.entries(originalObj).reduce((acc,[key,value])=>{
if(configFile.filterList[key]){
acc[键]=值;
}
返回acc;
}, {})

log(“使用Array.reduce:,{filteredObj}”)使用
.reduce
的替代方法是使用
.filter
const filtered=Object.entries(originalObj).filter([key])=>configFile.filterList[key])
然后执行
Object.fromEntries(filtered)
(这是一个很好的建议@RickN。。我认为Object.fromEntries是从节点12.0开始出现的。Object.reduce工作得很好。虽然我不确定引擎盖下到底发生了什么。我还将尝试另一种方法,看看我喜欢什么,并找出实际发生的情况。