首页 > 解决方案 > 使用 JSON 驱动的变量来执行 JS 数学

问题描述

我正在尝试执行一些 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”。奇怪,因为这意味着它可以从 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);

标签: javascriptjsonmathintegerglobal-variables

解决方案


尝试初始化你的计数器

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 数据示例。


推荐阅读