我正在嘗試按matchday的順序分離一個巨大的陣列。總共有38 個比賽日,我正在嘗試按比賽日顯示比賽。
我有這個
data.matches = [{matchday: 1, team: xxx}, {matchday: 1, team: xxx}, {matchday: 2, team: xxx} etc..]
我想要這樣的東西
data.matches = [[{matchday: 1, team: xxx}, {matchday: 1, team: xxx} ],[{matchday: 2, team: xxx}] etc..]
所以你可以看到我為每個不同的比賽日創建了一個新陣列,這些新陣列將嵌套在主陣列中。
我可憐的嘗試:
let results: any = [];
if (isSuccess) {
data.matches.map((item: any) => {
for (let i = 1; i < 38; i ) {
if (item.matchday === i) {
results.push(item);
} else {
results.splice(i, 0, item);
}
}
});
console.log(results);
}
uj5u.com熱心網友回復:
您可以使用此方法:
const matches = [{matchday: 1, team: "xxx"}, {matchday: 1, team: "xxx"}, {matchday: 2, team: "xxx"}]
const result = Array.from(matches
.reduce((m, val) => m.set(val.matchday, [...(m.get(val.matchday) || []), val]), new Map)
.values()
);
console.log(result)
uj5u.com熱心網友回復:
您可以為此使用減速器。使用 matchdays 鍵歸約為物件,并檢索其值。就像是:
const matches = [
{matchday: 1, team: `yxx`},
{matchday: 1, team: `xyx`},
{matchday: 2, team: `xxy`},
{matchday: 15, team: `yyx`},
{matchday: 15, team: `yyy`} ];
const byDay = Object.values(
matches.reduce( (acc, res) => {
acc[`day${res.matchday}`] = acc[`day${res.matchday}`]
? acc[`day${res.matchday}`].concat(res) : [res];
return acc;}, {} )
);
console.log(byDay);
.as-console-wrapper {
max-height: 100% !important;
}
uj5u.com熱心網友回復:
首先,您需要matchday從陣列中獲取唯一的,然后Array.find()您可以將結果陣列推送到父陣列中。要獲得獨特性matchday,您可以運行 for 回圈或new Set().
最簡單和最快的方法是遍歷每個元素并將元素matchday作為陣列索引推送到陣列中
let data = [{matchday: 1, team: 'xxx'}, {matchday: 1, team: 'xxx'}, {matchday: 2, team: 'xxx'} ]
const start = performance.now();
let sortedData = [];
data.forEach(a=>{
if(!sortedData[a.matchday-1])
sortedData[a.matchday-1]=[];
sortedData[a.matchday-1].push(a)
});
sortedData = sortedData.filter(a=>a);
const end = performance.now();
console.log(sortedData);
console.log(`Duration ${end-start}`)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/484553.html
標籤:javascript 数组 嵌套循环 减少
