为了获得更好的用例,我想要更改当前Array的结构,我想按这个顺序将项分组到子数组中。足球>段名>联赛>比赛。我被困在这上面已经好几个小时了。我试图使用减缩,但我的尝试都没有接近成功。下面是样本数据和我想要达到的结果。
const currentData = [
{
"fixtureName": "Fulham vs Chelsea",
"league": "Premier League",
"sport": "Soccer",
"segmentName": "England",
"markets": []
},
{
"fixtureName": "Arsenal vs liverpool",
"league": "Premier League",
"sport": "Soccer",
"segmentName": "England",
"markets": []
}, {
"fixtureName": "Middlesbrough FC vs. West Bromwich Albion",
"league": "Championship",
"sport": "Soccer",
"segmentName": "England",
"markets": []
}, {
"fixtureName": "Club El Porvenir vs. Berazategui",
"league": "Primera C",
"sport": "Soccer",
"segmentName": "Argentina",
"markets": []
}, {
"fixtureName": "Lille vs Angers ",
"league": "Ligue 1",
"sport": "Soccer",
"segmentName": "France",
"markets": []
}, {
"fixtureName": "PSG vs Nantes",
"league": "Ligue 1",
"sport": "Soccer",
"segmentName": "France",
"markets": []
}, {
"fixtureName": "Argentino de Quilmes vs. Comunicaciones",
"league": "Primera B",
"sport": "Soccer",
"segmentName": "Argentina",
"markets": []
}, {
"fixtureName": "Deportivo Merlo vs. Club Atletico Fenix",
"league": "Primera B",
"sport": "Soccer",
"segmentName": "Argentina",
"markets": []
},
]这是我想要的输出和结果的类型
const data = [
{
sportID: 1,
sportName: 'Soccer',
categories: [
{
itemName: 'Argentina',
tournaments: [
{
itemID: 1,
itemName: 'ARG - Primera B',
events: [
{
id: 1,
itemName: 'Argentino de Quilmes vs. Comunicaciones',
markets: [],
},
{
id: 2,
itemName: 'Deportivo Merlo vs. Club Atletico Fenix',
markets: [],
},
],
},
{
itemID: 2,
itemName: 'ARG - Primera C',
events: [
{
id: 1,
itemName: 'Club El Porvenir vs. Berazategui',
markets: [],
},
],
},
],
},
{
itemName: 'England',
tournaments: [
{
itemID: 1,
itemName: 'ENG - Premier League',
events: [
{
id: 1,
itemName: 'Arsenal vs Liverpool',
markets: [],
},
{
id: 2,
itemName: 'Fulham vs Chelsea',
markets: [],
},
],
},
{
itemID: 2,
itemName: 'ENG - Championship',
events: [
{
id: 1,
itemName: 'Middlesbrough FC vs. West Bromwich Albion',
markets: [],
},
],
},
],
},
{
itemName: 'France',
tournaments: [
{
itemID: 1,
itemName: 'Ligue 1',
events: [
{
id: 1,
itemName: 'PSG vs Nantes',
markets: [],
},
{
id: 2,
itemName: 'Lille vs Angers',
markets: [],
},
],
},
],
},
],
},
];发布于 2022-08-03 22:25:46
预期的结果与输入不完全匹配,但是这里有一种方法,通过首先创建树的对象(如果还没有创建),将每个项reduce到树中的位置。
var currentData = [{"fixtureName":"Fulham vs Chelsea","league":"Premier League","sport":"Soccer","segmentName":"England","markets":[]},{"fixtureName":"Arsenal vs liverpool","league":"Premier League","sport":"Soccer","segmentName":"England","markets":[]},{"fixtureName":"Middlesbrough FC vs. West Bromwich Albion","league":"Championship","sport":"Soccer","segmentName":"England","markets":[]},{"fixtureName":"Club El Porvenir vs. Berazategui","league":"Primera C","sport":"Soccer","segmentName":"Argentina","markets":[]},{"fixtureName":"Lille vs Angers ","league":"Ligue 1","sport":"Soccer","segmentName":"France","markets":[]},{"fixtureName":"PSG vs Nantes","league":"Ligue 1","sport":"Soccer","segmentName":"France","markets":[]},{"fixtureName":"Argentino de Quilmes vs. Comunicaciones","league":"Primera B","sport":"Soccer","segmentName":"Argentina","markets":[]},{"fixtureName":"Deportivo Merlo vs. Club Atletico Fenix","league":"Primera B","sport":"Soccer","segmentName":"Argentina","markets":[]}]
var obj = currentData.reduce(function(agg, item) {
agg[item.sport] ??= {}
agg[item.sport][item.segmentName] ??= {}
agg[item.sport][item.segmentName][item.league] ??= {}
agg[item.sport][item.segmentName][item.league][item.fixtureName] ??= []
agg[item.sport][item.segmentName][item.league][item.fixtureName].push(item)
return agg;
}, {});
console.log(obj).as-console-wrapper {
max-height: 100% !important;
}
https://stackoverflow.com/questions/73228246
复制相似问题