Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/471.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 从NodeJS筛选嵌套数组_Javascript_Node.js_Arrays - Fatal编程技术网

Javascript 从NodeJS筛选嵌套数组

Javascript 从NodeJS筛选嵌套数组,javascript,node.js,arrays,Javascript,Node.js,Arrays,我有一个nodejs Get请求,它返回以下数组: const array = [{ name: 'Alex', age: 10, details: [{ day: 'Monday', asst: 'Leo', subDetails: [{ color: 'green', qty: 85 }, { color: 'orange', qty: 35 }] }, { day: 'Tuesday', asst: 'Shaun', su

我有一个nodejs Get请求,它返回以下数组:

const array = [{
  name: 'Alex',
  age: 10,
  details: [{
    day: 'Monday',
    asst: 'Leo',
    subDetails: [{ color: 'green', qty: 85 }, { color: 'orange', qty: 35 }]
  },
  {
    day: 'Tuesday',
    asst: 'Shaun',
    subDetails: [{ color: 'brown', qty: 15 }, { color: 'indigo', qty: 35 }]
  },
  {
    day: 'Wednesday',
    asst: 'Julian',
    subDetails: [{ color: 'pink', qty: 25 }, { color: 'blue', qty: 15 }]
  },
  {
    day: 'Thursday',
    asst: 'Luis',
    subDetails: [{ color: 'peach', qty: 5 }, { color: 'black', qty: 15 }]
  },
  ]
}]
我想在将结果发送到前端之前,进一步过滤来自nodejs的结果。 我想在周一得到数组和嵌套数组。 这是我想要的数组:

const desiredArray = [{
  name: 'Alex',
  age: 10,
  details: [{
    day: 'Monday',
    asst: 'Leo',
    subDetails: [{ color: 'green', qty: 85 }, { color: 'orange', qty: 35 }]
  }]
}]
这是我的NodeJS get查询:

router.get('/getByDay/:id/:day', async (req, res) => {
  try {
        const array = await getDay.find({_id: req.params.id  });

        res.json({ success: true, array })
  } catch (err) { res.json({ success: false, message: 'An error occured' }); }
});

简单的方法是:

let desiredArray = array;
desiredArray[0].details = [desiredArray[0].details[0]];
const数组=[{
姓名:“Alex”,
年龄:10岁,
详情:[{
日期:'星期一',
助理:狮子座,
子详细信息:[{颜色:绿色,数量:85},{颜色:橙色,数量:35}]
},
{
日期:'星期二',
助理:肖恩,
子详细信息:[{颜色:棕色,数量:15},{颜色:靛蓝,数量:35}]
},
{
日:"星期三",,
助理:朱利安,
子详细信息:[{颜色:粉红色,数量:25},{颜色:蓝色,数量:15}]
},
{
日:"星期四",,
助理:路易斯,
子详细信息:[{颜色:桃红色,数量:5},{颜色:黑色,数量:15}]
},
]
}]
设desiredArray=数组;
desiredArray[0]。详细信息=[desiredArray[0]。详细信息[0]];
控制台日志(desiredArray)使用:

let数组=[{
姓名:“Alex”,
年龄:10岁,
详情:[{
日期:'星期一',
助理:狮子座,
子详细信息:[{颜色:绿色,数量:85},{颜色:橙色,数量:35}]
},
{
日期:'星期二',
助理:肖恩,
子详细信息:[{颜色:棕色,数量:15},{颜色:靛蓝,数量:35}]
},
{
日:"星期三",,
助理:朱利安,
子详细信息:[{颜色:粉红色,数量:25},{颜色:蓝色,数量:15}]
},
{
日:"星期四",,
助理:路易斯,
子详细信息:[{颜色:桃红色,数量:5},{颜色:黑色,数量:15}]
},
]
}]
array=array.map(item=>({…item,details:item.details.filter(detail=>detail.day===“星期一”)});

log(数组)
您只需要过滤掉嵌套的数组

array.map(item => ({...item, details: [item.details.find(detailsItem => detailsItem.day === "Monday")]}));

只需用过滤器替换细节

数组[0]。详细信息=数组[0]。详细信息。筛选器(d=>d.day==“星期一”)


console.log(数组)

此答案适用于需求变得更复杂的情况(例如注入数据、排序等)。如果是这样的话,我建议你调查一下

一开始可能看起来有点复杂,但我向你保证这里的一切都是有目的的

工作如下:(1)检查客户端请求的字段(2)确定需要从数据存储加载哪些字段(3)从数据存储加载请求字段(4)修改数据存储中的数据以满足请求字段的要求(5)将响应返回给客户端

使用插件(1)动态生成的字段(2)删除字段或嵌套实体(3)对嵌套实体进行排序使代码更通用,更易于管理

//const objectRewrite=require('object-rewrite');
const{filterPlugin,rewriter}=objectRewrite;
//在此处替换您自己的数据存储查询,如果需要,可以使用字段
常量queryDataStore=(字段)=>[{
姓名:“Alex”,
年龄:10岁,
详情:[{
日期:'星期一',
助理:狮子座,
子详细信息:[{颜色:绿色,数量:85},{颜色:橙色,数量:35}]
}, {
日期:'星期二',
助理:肖恩,
子详细信息:[{颜色:棕色,数量:15},{颜色:靛蓝,数量:35}]
}, {
日:"星期三",,
助理:朱利安,
子详细信息:[{颜色:粉红色,数量:25},{颜色:蓝色,数量:15}]
}, {
日:"星期四",,
助理:路易斯,
子详细信息:[{颜色:桃红色,数量:5},{颜色:黑色,数量:15}]
}]
}];
//定义你的过滤器插件
常量filterByWeekDay=filterPlugin({
名称:“按工作日筛选”,
目标:“*”,
要求:[“天”],
fn:({value,context})=>value.day===context.weekday
});
//数据存储字段应来自您的数据模型
const dataStoreFields=['name','age','details.day','details.asst','details.subDetails.color','details.subDetails.qty'];
//用插件定义你的重写器
const rew=rewriter({details:[filterByWeekDay]},dataStoreFields);
//这些来自客户端请求
const requestedFields=['name','details.day','details.asst'];
const rewInstance=rew.init(requestedFields);
//从数据存储中获取数据
const data=queryDataStore(rewInstance.fieldsToRequest);
//数据被重写
重写(数据,{weekday:'Monday'});
//现在回到客户机
控制台日志(数据);
//=>[{name:'Alex',详细信息:[{day:'Monday',asst:'Leo'}]}]
。作为控制台包装{最大高度:100%!重要;顶部:0}

此代码在javascript前端工作。所需的数组不是我所期望的Nodejs。router.get('/getByDay/:id/:eeid',async(req,res)=>{try{const array=wait getDay.find({u id:req.params.id});desiredArray=array.map(item=>({…item,details:item.details.filter(detail=>detail.day===“星期一”)));res.json({success:true,desiredArray})catch(err){res.json)({success:false,message:'发生错误'});}});问题中发布的所需数组将是
array.map(item=>({…item,details:item.details.filter(detail=>detail.day==“Monday”))的结果;
。您看到了什么区别?