使用 JSON 赋能变量来执行 JS 数学运算
Using JSON powered variables to perform JS math
我正在尝试执行一些 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);
它将 return 7。但是,上面我已经用实际整数替换了对 JSON 对象的引用。当我 运行 我的代码像这样从 JSON 调用中动态获取它的值时,它在控制台中 returns '70'。奇怪,因为这意味着它能够从 10 中减去 3,然后为 sparksAllRewards 添加一个 0,但它不会为 sparkstotalStreakOffers 显示另一个 0。
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);
我很困惑。有什么想法吗?
编辑:
这是工作脚本,根据 Arthur Borba
的指导
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);
尝试初始化您的计数器
var sparksOfferCount = (sparksSSO.totalOffers >= 0) ? sparksSSO.totalOffers : "" ;
带一个零(不是空字符串),像这样:
var sparksOfferCount = (sparksSSO.totalOffers >= 0) ? sparksSSO.totalOffers : 0 ;
还要检查此 Number 以确保您使用的是数字而不是字符串:
var sparksAllOffers = Number(sparksSSO.allOffers); // do it for every variable
如果这不是您想要的,请提供一些您的 JSON 数据示例。
我正在尝试执行一些 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);
它将 return 7。但是,上面我已经用实际整数替换了对 JSON 对象的引用。当我 运行 我的代码像这样从 JSON 调用中动态获取它的值时,它在控制台中 returns '70'。奇怪,因为这意味着它能够从 10 中减去 3,然后为 sparksAllRewards 添加一个 0,但它不会为 sparkstotalStreakOffers 显示另一个 0。
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);
我很困惑。有什么想法吗?
编辑: 这是工作脚本,根据 Arthur Borba
的指导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);
尝试初始化您的计数器
var sparksOfferCount = (sparksSSO.totalOffers >= 0) ? sparksSSO.totalOffers : "" ;
带一个零(不是空字符串),像这样:
var sparksOfferCount = (sparksSSO.totalOffers >= 0) ? sparksSSO.totalOffers : 0 ;
还要检查此 Number 以确保您使用的是数字而不是字符串:
var sparksAllOffers = Number(sparksSSO.allOffers); // do it for every variable
如果这不是您想要的,请提供一些您的 JSON 数据示例。