J'ai un jeu de cordes dans mon dom avec la même classe. Je dois convertir les chaînes en nombres, puis effectuer une analyse sur eux et les renvoyer à l'écran. J'ai utilisé parseInt, parseFloat, Number () et même la coercition en utilisant + variable; sans aucune personne. Je montre typeof comme "chaîne" dans tous les cas. Je ne sais pas ce que je fais de mal. Quelqu'un peut-il m'aider à trouver ce qui me manque? Voici mon html:

<div class="price">
  <span class="label">from</span>
  <span class="value">
    <span class="text-lg lh1em item "> $3,845.00</span>
  </span>
  <span class="value">
    <span class="text-lg lh1em item "> $3,645.00</span>
  </span>
</div>

Et mon Javascript est le suivant:

let customPrice = document.getElementsByClassName('lh1em');

Array.from(customPrice).forEach(function(dollarAmount) {
    let withoutDollar = dollarAmount.innerText.substr(1); 
    let withoutComa = withoutDollar.replace(",",'');
    // parseFloat(withoutComa);
    let noPointZero = withoutComa.replace(/\.00/, '');
     // noPointZero * 1;
    // parseInt(noPointZero);
    Number(noPointZero);
    console.log(typeof noPointZero);
}); 

Sans le typeof, j'obtiens la valeur numérique correcte sous forme de chaîne. Comment puis-je forcer cela à être un nombre? Merci.

0
Erik James Robles 25 févr. 2021 à 03:23

3 réponses

Meilleure réponse

Vous avez un espace au début du texte. Donc substr(1) supprime l'espace, pas le $. Utilisez trim() pour supprimer les espaces blancs environnants.

Vous devez également attribuer le résultat de Number() à la fin. C'est comme toutes vos autres corrections - cela renvoie une nouvelle valeur, cela ne modifie pas la valeur en place.

Pour remplacer les virgules, vous devez utiliser une expression régulière avec le modificateur g. Le remplacement d'une chaîne remplace uniquement la première occurrence.

Array.from(customPrice).forEach(function(dollarAmount) {
    let withoutDollar = dollarAmount.innerText.trim().replace(/^\$/, '');
    let withoutComa = withoutDollar.replace(/,/g,'');
    // parseFloat(withoutComa);
    let noPointZero = withoutComa.replace(/\.00$/, '');
     // noPointZero * 1;
    // parseInt(noPointZero);
    let numeric = Number(noPointZero);
    console.log(typeof numeric);
}); 
2
Barmar 25 févr. 2021 à 00:28

Il y a un espace dont substr() est en train de se débarrasser. Faites plutôt .replace(/[^0-9.]/g, '').

0
Hashbrown 25 févr. 2021 à 00:27

Les nombres et les chaînes sont immuables. Attribuez la conversion à une variable à utiliser ultérieurement.

let customPrice = document.getElementsByClassName('lh1em');

Array.from(customPrice).forEach(function(dollarAmount) {
    let withoutDollar = dollarAmount.innerText.substr(1); 
    let withoutComa = withoutDollar.replace(",",'');
    let noPointZero = withoutComa.replace(/\.00/, '');
    noPointZero = Number(noPointZero);
    console.log(typeof noPointZero, noPointZero);
}); 
<div class="price">
  <span class="label">from</span>
  <span class="value">
    <span class="text-lg lh1em item "> $3,845.00</span>
  </span>
  <span class="value">
    <span class="text-lg lh1em item "> $3,645.00</span>
  </span>
</div>
1
evolutionxbox 25 févr. 2021 à 00:28