javascript - 将对象数组转换为所需格式
问题描述
我有一组数据。
let list = [
{
"Id": 1,
"Name": "North Campus",
"OptId": 1,
"OptName": "Religious Reasons",
"mapped": 1
},
{
"Id": 2,
"Name": "JNTUK",
"OptId": 1,
"OptName": "Religious Reasons",
"mapped": 1
},
{
"Id": 3,
"Name": "JNTUH",
"OptId": 1,
"OptName": "Religious Reasons",
"mapped": 1
},
{
"Id": 1,
"Name": "North Campus",
"OptId": 2,
"OptName": "Medical Reasons",
"mapped": 1
},
{
"Id": 2,
"Name": "JNTUK",
"OptId": 2,
"OptName": "Medical Reasons",
"mapped": 1
},
{
"Id": 3,
"Name": "JNTUH",
"OptId": 2,
"OptName": "Medical Reasons",
"mapped": 0
},
{
"Id": 4,
"Name": "Sample Name",
"OptId": 2,
"OptName": "Medical Reasons",
"mapped": 1
},
{
"Id": 5,
"Name": "updated name",
"OptId": 2,
"OptName": "Medical Reasons",
"mapped": 0
}
]
我的预期输出是
[
{
"OptName": "Medical Reasons",
"OptId": 2,
"campuses": [
{
"Id": 5,
"Name": "updated name",
"mapped": 0
},
{
"Id": 4,
"Name": "Sample Name",
"mapped": 1
},
{
"Id": 3,
"Name": "JNTUH",
"mapped": 0
},
{
"Name": "JNTUK",
"OptId": 2,
"mapped": 1
}
]
},
{
"OptName": "Religious Reasons",
"OptId": 1,
"campuses": [
{
"Id": 1,
"Name": "North Campus",
"mapped": 1
},
{
"Id": 2,
"Name": "JNTUK",
"mapped": 1
},
{
"Id": 3,
"Name": "JNTUH",
"mapped": 1
},
{
"Name": "JNTUK",
"OptId": 2,
}
]
}
]
解决方案
let list = [ { "Id": 1, "Name": "North Campus", "OptId": 1, "OptName": "Religious Reasons", "mapped": 1 }, { "Id": 2, "Name": "JNTUK", "OptId": 1, "OptName": "Religious Reasons", "mapped": 1 }, { "Id": 3, "Name": "JNTUH", "OptId": 1, "OptName": "Religious Reasons", "mapped": 1 }, { "Id": 1, "Name": "North Campus", "OptId": 2, "OptName": "Medical Reasons", "mapped": 1 }, { "Id": 2, "Name": "JNTUK", "OptId": 2, "OptName": "Medical Reasons", "mapped": 1 }, { "Id": 3, "Name": "JNTUH", "OptId": 2, "OptName": "Medical Reasons", "mapped": 0 }, { "Id": 4, "Name": "Sample Name", "OptId": 2, "OptName": "Medical Reasons", "mapped": 1 }, { "Id": 5, "Name": "updated name", "OptId": 2, "OptName": "Medical Reasons", "mapped": 0 } ]
console.log(list.reduce((arr, el) => {
let target = arr.find(({OptId}) => OptId === el.OptId);
if(!target) {
target = {OptName: el.OptName, OptId: el.OptId, campuses: []};
arr.push(target);
}
target.campuses.push({
Id: el.Id,
Name: el.Name,
mapped: el.mapped
})
return arr;
},[]));
推荐阅读
- dbus - lxc与主机之间的D-BUS通信
- google-bigquery - 分析函数 Big Query 中的条件平均值
- html - IOS中的file:///android_asset
- amazon-web-services - Step Functions - 在后面的步骤中使用旧步骤的输出(非顺序)
- c# - 编写需要包装需要 System.Web.Services 的 3rd-Party DLL 的 .NET5 WPF 的最佳方法是什么
- r - 根据值绘制带有彩色圆圈的矩阵
- python - Python Selenium 等待。当页面相同时防止过时错误
- r - 如何在 Shiny 中包含 2 个沿相反方向移动的滑块?
- javascript - 为什么将页面滚动到顶部在反应中不起作用?
- javascript - 如何使用钩子将 React 类组件转换为功能组件