Javascript 如何基于req.query.params筛选json对象

Javascript 如何基于req.query.params筛选json对象,javascript,node.js,json,Javascript,Node.js,Json,我正在使用node.js和express,需要过滤掉json对象数组的结果 这是我的对象数组 [ { id:1, 姓名:“第1人”, 采购项目:{ 物品:“鞋子”, 货币:“英镑”, 费用:200 }, { 物品:“袋子”, 货币:“欧元”, 费用:300 } }, { id:2, 姓名:“第二人”, 采购项目:{ 物品:“衬衫”, 货币:“英镑”, 费用:13 }, { 项目:“夹克”, 货币:“CAD”, 费用:150 } } ] 使用端点ex:/大陆?货币=欧元 我想像这样过滤结果 [ {

我正在使用node.js和express,需要过滤掉json对象数组的结果

这是我的对象数组

[
{
id:1,
姓名:“第1人”,
采购项目:{
物品:“鞋子”,
货币:“英镑”,
费用:200
},
{
物品:“袋子”,
货币:“欧元”,
费用:300
}
},
{
id:2,
姓名:“第二人”,
采购项目:{
物品:“衬衫”,
货币:“英镑”,
费用:13
},
{
项目:“夹克”,
货币:“CAD”,
费用:150
}
}
]

使用端点ex:/大陆?货币=欧元

我想像这样过滤结果

[
{
id:1,
姓名:“第1人”,
采购项目:
{
物品:“袋子”,
货币:“欧元”,
费用:300
}
}
]

对于ex:/大陆?货币=英镑

[
{
id:1,
姓名:“第1人”,
采购项目:{
物品:“鞋子”,
货币:“英镑”,
费用:200
}
},
{
id:2,
姓名:“第二人”,
采购项目:{
物品:“衬衫”,
货币:“英镑”,
费用:13
}
}
]


我应该使用filter方法执行此操作吗?

您的Javascript数组无效
boughtItems
应该是一个列表,我修改了数组,如果这真的是你的意思的话

这不会改变原始数据

使用及

const数据=[{
id:1,
姓名:“第1人”,
采购项目:[{
物品:“鞋子”,
货币:“英镑”,
费用:200
},
{
物品:“袋子”,
货币:“欧元”,
费用:300
}
]
},
{
id:2,
姓名:“第二人”,
采购项目:[{
物品:“衬衫”,
货币:“英镑”,
费用:13
},
{
项目:“夹克”,
货币:“CAD”,
费用:150
}
]
}
]
//通过请求参数获取货币
const c=“EUR”;
const res=data.reduce((acc,{boughtItems,id,name})=>{
//筛选所有项目,并获取与货币匹配的项目
const items=boughtItems.filter(({currency})=>currency==c);
//如果存在一些匹配项,则使用匹配项创建对象
如果(items.length>0){
acc.push({id,name,boughtItems:items})
}
返回acc;
}, []);

控制台日志(res)只需使用
过滤器

const数组=[
{
id:1,
姓名:“第1人”,
采购项目:[{
物品:“鞋子”,
货币:“英镑”,
费用:200
},
{
物品:“袋子”,
货币:“欧元”,
费用:300
}]
},
{
id:2,
姓名:“第二人”,
采购项目:[{
物品:“衬衫”,
货币:“英镑”,
费用:13
},
{
项目:“夹克”,
货币:“CAD”,
费用:150
}]
}
];
常量filterData=(数组,filterValue)=>array.filter(obj=>(obj.boughtItems=obj.boughtItems.filter(o=>o.currency===filterValue)).length);

log(filterData(数组,'GBP'))1。没有JSON对象这样的东西。2.使用
Array.map()
@ChrisG--你的意思是
Array.filter()
?@31piy我被搞糊涂了,因为问题的第一段代码不是有效的对象文字。@fabtree请告诉我们你的实际输出,我假设
boughtItems
是一个数组?这不会过滤出没有任何适合货币的项目的人。@克里斯,你说得对,没有注意到,我已经更新了我的answer@ChrisG它也和你的一样是单行,但我的代码更少:啊,不错:)