[英]Typescript reduce I want to sum numbers but the previous value becomes string
我有一個 typescript function 遍歷對象數組,並對它們進行匯總。 如果我隱含地給值一個數字,它就可以工作,但是如果它來自輸入,它會將值轉換為字符串。
const mmrChanges = matches.reduce<IHistory[]>(
(previous: IHistory[], match: IMatch, index: number) => {
const mmrChange = (match.party_size > 1 ? 20 : 30) * isWon(match); // party game 20 mmr, solo game 30
const prevMmr = previous[previous.length - 1].value;
return [
...previous,
{
index: index,
value: prevMmr + mmrChange,
time: new Date(match.start_time * 1000).toISOString().split("T")[0],
},
];
},
[{ index: 0, value: currentMmr, time: "" }]
);
console.log(mmrChanges);
值類型是:(屬性)IHistory.value:數字,當前 mmr 是:const currentMmr:數字
但是,當我開始累積值數字時,它開始將值連接為字符串。 當前值 = 400
下一次迭代它變成:
{
"index": 0,
"value": "40030",
"time": "2022-01-25"
}
我試圖用“as number”強制它在reduce function中顯式編號我還嘗試了parseInt()function,但隨后typescript可以將錯誤轉換為in
我在這里想念什么? 如果我將 currentMmr 更改為 0,它會按預期工作。
下面的這個解決方案似乎已經達到了預期的結果:
const mmrChanges = matches.reduce<IHistory[]>(
(previous: IHistory[], match: IMatch, index: number) => {
const mmrChange = (match.party_size > 1 ? 20 : 30) * isWon(match); // party game 20 mmr, solo game 30
const prevMmr = previous[previous.length - 1].value;
return [
...previous,
{
index: index,
value: prevMmr + mmrChange,
time: new Date(match.start_time * 1000).toISOString().split("T")[0],
},
];
},
[{ index: 0, value: parseInt(currentMmr.toString()) || 0, time: "" }]
);
console.log(mmrChanges);
發生了什么變化?
.reduce
聚合器設置為[{ index: 0, value: parseInt(currentMmr.toString()) || 0, time: "" }]
[{ index: 0, value: parseInt(currentMmr.toString()) || 0, time: "" }]
為什么?
在問題中, currentMmr
可以是任何值。 為了確保它始終是一個 int, value
prop 設置為parseInt(currentMmr.toString())
。 .toString()
確保如果currentMmr
是 integer,它仍被視為字符串。 並且, parseInt
將字符串轉換為 int。
注意:這個解決方案迎合了這個特定的問題。 它在其他情況下可能無法按原樣工作,可能需要定制。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.