javascript - 如何从数组本身重构数组?
问题描述
我的数组是:
[{
"Id": 1891,
"AirportCode": "DUB",
"AirportName": "Dublin Airport",
"AirportCity": "Dublin",
"Priority": 1,
"SubPriority": 0
},
{
"Id": 1921,
"AirportCode": "DXB",
"AirportName": "Dubai International Airport",
"AirportCity": "Dubai",
"Priority": 1,
"SubPriority": 0
},
{
"Id": 1680,
"AirportCode": "DBN",
"AirportName": "Dublin Municipal Airport",
"AirportCity": "Dublin",
"Priority": 2,
"SubPriority": 1
},
{
"Id": 8973,
"AirportCode": "XNB",
"AirportName": "United Arab Emirates - Bus Station",
"AirportCity": "Dubai",
"Priority": 2,
"SubPriority": 1
},
{
"Id": 6062,
"AirportCode": "PSK",
"AirportName": "New River Valley Airport",
"AirportCity": "Dublin",
"Priority": 3,
"SubPriority": 1
},
{
"Id": 1681,
"AirportCode": "DBO",
"AirportName": "Dubbo Airport",
"AirportCity": "Dubbo",
"Priority": 99,
"SubPriority": null
}
]
我希望它像 -
我编写了如下函数,因为 AirportCity 是相同的,并且 SubPriority 不为空
const customAirports = [];
myArray.map((val, i, arr) => {
let pushedInSubAirport = false;
for (let v of customAirports) {
if (v.AirportCity === (val.SubPriority ?
val.AirportCity : undefined)
) {
if (!v['SubAirport'])
Object.assign(v, { SubAirport: [] })
v['SubAirport'].push(val);
pushedInSubAirport = true;
break;
}
}
if (!pushedInSubAirport)
customAirports.push(val)
});
myArray = customAirports;
如果不合适,请建议我解决方案。
解决方案
另一种方式
this.airports.sort((a,b)=>a.Priority-b.Priority) //sort by priority
this.airports.forEach((x,index)=>{
const airport=this.airports.find( //try find one more on top
(a,index2)=>a.AirportCity==x.AirportCity && index>index2)
if (airport) //if exist
{
if (!airport.SubAirport) //if has not SubAirport
airport.SubAirport=[{...x}] //create an array with one element
else
airport.SubAirport.push({...x}) //add to array
x.remove=true; //mark as "removable"
}
})
this.airports=this.airports.filter(x=>!x.remove) //<--remove the removable
推荐阅读
- r - 根据时间计算事件差异
- android - React Native,未连接任何应用程序。向所有 React Native 应用程序发送“重新加载”失败
- java - 如果@SpringBootTest 无法加载 ApplicationContext,如何使故障安全插件失败
- mysql - SQL Inner Join for 2 parents - Child - SubChild 表自定义查询
- python - joblib.Parallel 如何处理全局变量?
- html - 字体在 MacOS 上垂直居中,但在 Windows 上不垂直居中
- javascript - 具有多级嵌套轴标签的图表库
- google-cloud-platform - Google Cloud Run - 使用 Eventarc API 触发(资源名称语法)
- python - 用 scipy 查找两个数组的点之间的最短距离
- php - PHP脚本输出的AJAX连续响应