我正在嘗試將物件陣列轉換為帶有鍵的物件陣列:name并轉換winRatio為另一個物件陣列,鍵為 winRatio陣列中的每個唯一名稱和專案的值。
這個問題的目的是轉換傳入的資料并將其重新格式化為圖表實作解決方案(Recharts,如果您有興趣)
輸入
const data = [
{
name: 'Tyler',
winRatio: [1, 0.5, 0.6666666666666666],
},
{
name: 'Lizzie',
winRatio: [0, 0.5, 0.3333333333333333],
},
];
輸出
const formatted = [
{
index: 0,
Tyler: 1,
Lizzie: 0,
},
{
index: 1,
Tyler: 0.5,
Lizzie: 0.5,
},
{
index: 2,
Tyler: 0.6666,
Lizzie: .333,
},
];
我想過使用 map 和 reduce 陣列函式,但我似乎無法完全理解這一點。
注意 此外,輸出中的每個物件都應該有一個與物件關聯的索引值,該值遞增 1。
注意 輸出陣列的長度應等于任何 winRatio 陣列的最長長度。例如,如果 'Tyler' 的 winRatio 有 20 個專案,則輸出陣列應該有 20 個物件。
uj5u.com熱心網友回復:
這是您可以使用減速器來做到這一點的一種方法。它回圈遍歷資料陣列,獲取每個玩家物件并以您請求的格式將其組合到最終陣列中。
const reducer = (previousValue, currentValue,index) => {
let current = {}
currentValue.winRatio.forEach( (x, index) => {
current = previousValue[index] ?? { index };
current[currentValue.name] = x
previousValue[index] = current
})
return previousValue
}
data.reduce(reducer, [])
至于你的兩個筆記,輸出是一個陣列,所以它應該知道它的索引,但你可以在本例中的 forEach 塊中添加一行,如果在回圈時還不存在索引鍵/值對,則添加一個索引鍵/值對。對于您的第二個注意事項,我不確定如何在不首先對陣列進行排序(或遍歷它并注意最長的 winRatio 長度)的情況下解決這個問題,所以我想您可以這樣做。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/350519.html
標籤:javascript 数组 算法 降低
上一篇:使陣列不減少的最小操作次數
