簡體   English   中英

Typescript 減少我想對數字求和,但之前的值變成了字符串

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM