Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

123
Visualizações
Typescript reduce Quiero sumar números pero el valor anterior se convierte en cadena

Tengo una función mecanografiada que atraviesa una serie de objetos y los resume. Estaba funcionando si implícito le doy al valor un número, sin embargo, si proviene de la entrada, convierte el valor en una cadena.

 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);

el tipo de valor es: (propiedad) IHistory.value: número y el mmr actual es: const currentMmr: número

Sin embargo, cuando empiezo a acumular los números de valor, comienza a concatenar valores como cadenas. valor actual = 400

la siguiente iteración se convierte en:

 { "index": 0, "value": "40030", "time": "2022-01-25" }

Traté de forzarlo a numerar explícitamente dentro de la función de reducción con "como número". También probé la función parseInt (), pero luego mecanografiado arroja un error. No puedo transformar el número en int.

¿Que me estoy perdiendo aqui? Si cambio el Mmr actual a 0, funciona según lo previsto.

about 4 years ago · Juan Pablo Isaza
1 Respostas
Responde à pergunta

0

Esta solución a continuación parece haber logrado los resultados deseados:

 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);

¿Qué cambió?

El agregador .reduce se estableció en [{ index: 0, value: parseInt(currentMmr.toString()) || 0, time: "" }]

¿Por qué?

En la pregunta, currentMmr podría ser cualquier valor. Para garantizar que siempre sea un int, la propiedad de value se establece como parseInt(currentMmr.toString()) . El .toString() asegura que en caso de que currentMmr sea un número entero, todavía se trata como una cadena. Y, parseInt transforma la cadena en un int.

Nota: Esta solución responde a esta pregunta en particular. Es posible que no funcione TAL CUAL en otros contextos y es posible que deba personalizarse.

about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda