Я пытаюсь выполнить некоторую математику JS, чтобы добавить общее значение на основе ряда переменных, которые получают свои значения из объекта JSON. Однако, когда я запускаю скрипт в браузере, журнал консоли показывает мне почти половину выполненной суммы, а половину просто объединены в цепочку в виде строки.

Если я вставлю в консоль следующее:

var sparksOfferCount = 10;
var sparksAddedOffers = 3;
var sparksUNaddedOffers = (sparksOfferCount - sparksAddedOffers); // offers that haven't been added yet
var sparksAllRewards = 0;
var sparkstotalStreakOffers = 0;
var derivedSparksTotalOffers = (sparksUNaddedOffers + sparksAllRewards + sparkstotalStreakOffers);
console.log('derived total of new offers', derivedSparksTotalOffers);

Он вернет 7. Однако выше я заменил ссылки на объект JSON фактическими целыми числами. Когда я запускаю свой код, подобный этому, где он динамически принимает значения из вызова JSON, он возвращает «70» в консоли. Странно, потому что это означает, что он может вычесть 3 из 10, а затем добавить один 0 для sparksAllRewards, но он не показывает еще один 0 для sparkstotalStreakOffers.

var sparksSSO = JSON.parse(sessionStorage.getItem('sparksSSO')) || {};
// global variables for use with session storage
var sparksOfferCount = (sparksSSO.totalOffers >= 0) ? sparksSSO.totalOffers : "" ;
var sparksAllOffers = (sparksSSO.allOffers);
var sparksAddedOffers = (sparksSSO.totalAddedOffers);
var sparksUNaddedOffers = (sparksOfferCount - sparksAddedOffers); // offers that haven't been added yet
var sparksAllRewards = (sparksSSO.allRewards);
var sparkstotalStreakOffers = (sparksSSO.totalStreakOffers);
var derivedSparksTotalOffers = (sparksUNaddedOffers + sparksAllRewards + sparkstotalStreakOffers);
console.log('derived total of new offers from session storage', derivedSparksTotalOffers);

Я немного сбит с толку. Есть идеи?

РЕДАКТИРОВАТЬ: Вот рабочий сценарий в соответствии с руководством Артура Борба

var sparksOfferCount = (sparksSSO.totalOffers >= 0) ? sparksSSO.totalOffers : 0 ;

var sparksAllOffers = Number(sparksSSO.allOffers); 
var sparksAddedOffers = Number(sparksSSO.totalAddedOffers);
var sparksUNaddedOffers = Number(sparksOfferCount - sparksAddedOffers); // offers that haven't been added yet
var sparksAllRewards = Number(sparksSSO.allRewards);
var sparkstotalStreakOffers = Number(sparksSSO.totalStreakOffers);
var derivedSparksTotalOffers = Number(sparksUNaddedOffers + sparksAllRewards + sparkstotalStreakOffers);
console.log('derived total of new offers from session storage', derivedSparksTotalOffers);
0
Chuwa Feet 18 Мар 2021 в 21:38

1 ответ

Лучший ответ

Попробуйте инициализировать свой счетчик

var sparksOfferCount = (sparksSSO.totalOffers >= 0) ? sparksSSO.totalOffers : "" ;

С нулем (не пустой строкой), например:

var sparksOfferCount = (sparksSSO.totalOffers >= 0) ? sparksSSO.totalOffers : 0 ;

А также проверьте этот номер, чтобы убедиться, что вы работаете с числами, а не со строками:

var sparksAllOffers = Number(sparksSSO.allOffers); // do it for every variable

Если это не совсем то, что вам нужно, приведите пример ваших данных JSON.

0
Arthur Borba 18 Мар 2021 в 19:47