У меня есть набор строк в моем доме с тем же классом. Мне нужно преобразовать строки в числа, а затем выполнить их вычисление и вернуть на экран. Я использовал parseInt, parseFloat, Number () и даже принуждение с использованием переменной +; без всякой беседы. Я всегда показываю typeof как «строку». Я не уверен, что делаю неправильно. Может ли кто-нибудь помочь мне найти то, что мне не хватает? Вот мой 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>

А мой Javascript выглядит следующим образом:

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

Без typeof я получаю правильное числовое значение в виде строки. Как я могу заставить это быть числом? Спасибо.

0
Erik James Robles 25 Фев 2021 в 03:23

3 ответа

Лучший ответ

У вас есть пробел в начале текста. Итак, substr(1) удаляет пробел, а не $. Используйте trim(), чтобы удалить окружающие пробелы.

Вам также необходимо присвоить результат Number() в конце. Это точно так же, как и все ваши другие исправления - он возвращает новое значение, он не изменяет значение на месте.

Для замены запятых необходимо использовать регулярное выражение с модификатором g. Замена строки заменяет только первое вхождение.

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 Фев 2021 в 00:28

Есть пространство, от которого избавляется ваш substr(). Вместо этого сделайте .replace(/[^0-9.]/g, '').

0
Hashbrown 25 Фев 2021 в 00:27

Числа и строки неизменны. Назначьте преобразование переменной, которая будет использоваться позже.

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 Фев 2021 в 00:28