parseInt, parseFloat, ни принуждение строки, ни преобразование Number() строки в число

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


person Erik James Robles    schedule 25.02.2021    source источник
comment
Числа и строки неизменяемы. Назначьте преобразование используемой переменной, noPointZero = Number(noPointZero);   -  person evolutionxbox    schedule 25.02.2021
comment
@evolutionbox был прав. Мне нужно было повторно объявить мою переменную с помощью функции number(), и теперь она возвращает число как тип.   -  person Erik James Robles    schedule 25.02.2021


Ответы (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);
}); 
person Barmar    schedule 25.02.2021
comment
хорошая подборка исправлений ???? - person evolutionxbox; 25.02.2021
comment
по какой-то причине знак доллара был удален правильно. пусть числовой = число (noPointZero); был недостающим ингредиентом. Так что спасибо за этот ответ и @evolutionxbox за то, что направили меня в правильном направлении. - person Erik James Robles; 25.02.2021

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

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>

person evolutionxbox    schedule 25.02.2021

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

person Hashbrown    schedule 25.02.2021