javascript - 使用 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);
解决方案
尝试初始化你的计数器
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 数据示例。
推荐阅读
- python - 我想将 R 代码转换为 python。如何使用 python 执行以下给定的操作?
- excel - 在 Excel Javascript API 中使用任意大小的数组设置范围值?
- html - 如何在浏览器视口之外渲染图片?
- powershell - 如何通过powershell使用rest api在azure devops中创建测试运行附件
- javascript - 如何将两种服务变成一种服务?
- r - How can I correct my for loop code to ensure that it is applied to each of my columns and the results are combined together?
- sql-server - SQL 更新设置值 where
- r - 如果函数参数中有NULL,有没有办法删除它们
- build - CMake - 使用外部库作为 APR
- php - Wordpress 插件开发 admin-ajax.php 400(错误请求)