[英]Javascript - Filter a nested arrays and objects
我是 JavaScript 新手,我正在尝试过滤下面的嵌套数组。 如何使用 JavaScript 按状态、sales_rep 和 account_manager 或状态、sales_rep 或 account_manager 过滤数组,然后返回过滤后的数组。
我来自 python 背景。
[
{"account_manager":"Account Manager 1",
"Accounts":[
{
"customer":"Customer 1",
"Orders":[
{
"order_no":"001",
"Services":[
{
"service_id":"001",
"sales_rep":"John Doe",
"order_project_manager":"Project Manager 1",
"status":"Provisioning - On Hold",
},
{
"service_id":"002",
"sales_rep":"Jane Doe",
"order_project_manager":"Project Manager 2",
"status":"Provisioning - Delay",
}
]
}
]
}
]
},
{
"account_manager":"Account Manager 2",
"Accounts":[
{"customer":"Customer 2",
"Orders":[
{
"order_no":"002",
"Services":[
{
"service_id":"003",
"sales_rep":"James Doe",
"order_project_manager":"Project Manager 3",
"status":"Provisioning - Delay",
},
{
"service_id":"003",
"sales_rep":"Mary Doe",
"order_project_manager":"Project Manager 1",
"status":"Provisioning - On Time (Low Risk)",
},
{
"service_id":"003",
"sales_rep":"Joey Doe",
"order_project_manager":"Project Manager 3",
"status":"Provisioning - On Time (High Risk)",
},
]
}
]
}
]
},
]
如果按状态“Provisioning - Delay”过滤,预期结果应该是:
{"account_manager":"Account Manager 1",
"Accounts":[
{
"customer":"Customer 1",
"Orders":[
{
"order_no":"001",
"Services":[
{
"service_id":"002",
"sales_rep":"Jane Doe",
"order_project_manager":"Project Manager 2",
"status":"Provisioning - Delay",
}
]
}
]
}
]
},
{
"account_manager":"Account Manager 2",
"Accounts":[
{"customer":"Customer 2",
"Orders":[
{
"order_no":"002",
"Services":[
{
"service_id":"003",
"sales_rep":"James Doe",
"order_project_manager":"Project Manager 3",
"status":"Provisioning - Delay",
},
]
}
]
}
]
},
https://jsfiddle.net/f7guyzk2/
function filter(status, inputData) {
const filterServices = (order) => {
return {
...order,
Services: order.Services.filter((service) => service.status === status),
};
};
const filterOrders = (account) => {
return {
...account,
Orders: account.Orders.map(filterServices).filter(
(order) => order.Services.length > 0
),
};
};
const filterAccounts = (item) => {
return {
...item,
Accounts: item.Accounts.map(filterOrders).filter(
(account) => account.Orders.length > 0
),
};
};
return inputData
.map(filterAccounts)
.filter((item) => item.Accounts.length > 0);
}
const res = filter("Provisioning - Delay", data /* Here put your data */);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.