Disons que j'ai une liste de points déclarés dans ce format: x1, y1 x2, y2

listOfPoints : string = "12.2, 13.0 198.2, 141";

Que pourrais-je faire pour multiplier par 1,5, par exemple, chaque numéro de cette chaîne? Dois-je parcourir la liste des points et extraire une chaîne chaque fois qu'il y a un ',' ou '', convertir cette chaîne en nombre, la multiplier par 1,5 et la reconvertir en chaîne pour enfin la mettre dans une nouvelle chaîne (newListOfPoints)?

Ou existe-t-il une manière différente de le faire plus efficacement?

Je vous remercie.

0
hichamcheniti 4 nov. 2019 à 04:57

1 réponse

Utilisez une expression régulière avec une fonction de remplacement pour faire correspondre les chiffres, éventuellement avec des décimales, et remplacez-les par ces chiffres multipliés par le nombre souhaité:

const listOfPoints = "12.2, 13.0 198.2, 141";
const multiplied = listOfPoints.replace(
  /\d+(?:\.\d+)?/g,
  match => match * 1.5
);
console.log(multiplied);

En raison de problèmes de virgule flottante, certains des nombres résultants peuvent avoir des chiffres de fin. Si vous ne le souhaitez pas, vous pouvez arrondir le nombre multiplié à un certain nombre de décimales:

const listOfPoints = "12.2, 13.0 198.2, 141";
const multiplied = listOfPoints.replace(
  /\d+(?:\.\d+)?/g,
  match => Math.round(1000 * match * 1.5) / 1000
);
console.log(multiplied);
1
CertainPerformance 4 nov. 2019 à 01:58