计算for循环中JSON中两个值之间的百分比
Calculate percentage between two values in a JSON in a for loop
我有一个JSON,里面有日常数据。
我想做的是,对于每个值,计算第n天和第n+3天之间的差异百分比。
quote1
是第n天,quote2
是第n+3天。
但是,由于明显的原因,我不能在for
循环中使用quotes[i+3]
。
知道吗?非常感谢。
for (var i = quotes.length - 1; i >= 0; i--) {
function percent(quote1, quote2) {
var quote1 = parseInt(quote1);
var quote2 = parseInt(quote2);
return ((quote1 / quote2) -1 ) * 100;
}
console.log(percent(quotes[i].Close, quotes[i].Close) + ' %');
};
首先,将function
放在for
循环中并不是一个好主意:
function percent(quote1, quote2) {
var quote1 = parseInt(quote1);
var quote2 = parseInt(quote2);
return ((quote1 / quote2) -1 ) * 100;
}
for (var i = quotes.length - 1; i >= 0; i--) {
console.log(percent(quotes[i].Close, quotes[i].Close) + ' %');
};
这是一个很好的实践,因为每次通过循环时都要定义function
,这是低效的,而且几乎违背了创建function
的目的,即限制冗余代码。
接下来,对于你的问题,如果你有一个3的范围,在这个范围内你总是会得到差异,你可以将你的循环偏移到i=END-3=0
上结束
for (var i = quotes.length - 1; i >= 3; i--) {
console.log(percent(quotes[i].Close, quotes[i-3].Close) + ' %');
};
或在i = Start + 3 = Length of List
上启动
for (var i = (quotes.length - 1) - 3; i >= 0; i--) {
console.log(percent(quotes[i].Close, quotes[i+3].Close) + ' %');
};
编辑
根据您向我展示的输出图像,我建议从使用parseInt
切换到使用parseFloat
以保留十进制值。这就是导致奇怪结果的原因。例如:
percent(29.19,28.17) => 3.57... %
percent(29.65,29.24) => 0 %
之所以会出现这种情况,是因为您正在计算输入整数值的百分比变化,而不包括有效数字所在的小数部分:
逐步通过function percent
:
>>> percent("29.19","28.17");
// Internal
var quote1 = parseInt("29.19"); // quote1 now equals 29
var quote2 = parseInt("28.17"); // quote2 now equals 28
return ((quote1/quote2) - 1) * 100;
// ( (29/28) - 1 ) * 100
// ( (1.0357142857142858) - 1) * 100
// (0.0357...) * 100 = 3.57....
第二个例子:
>>> percent("29.65","29.24");
// Internal
var quote1 = parseInt("29.65"); // quote1 now equals 29
var quote2 = parseInt("29.24"); // quote2 now equals 29
return ((quote1/quote2) - 1) * 100;
// ( (29/29) - 1 ) * 100
// ( (1) - 1) * 100
// (0) * 100 = 0
切换到parseFloat
,一切都应该正常。
function percent(quote1, quote2) {
var quote1 = parseFloat(quote1);
var quote2 = parseFloat(quote2);
return ((quote1 / quote2) -1 ) * 100;
}
为什么不以quotes.length-4开始for循环?无论如何,你都不会得到前三句名言的有意义的答案。
for (var i = quotes.length - 4; i >= 0; i--) {
function percent(quote1, quote2) {
var quote1 = parseInt(quote1);
var quote2 = parseInt(quote2);
return ((quote1 / quote2) -1 ) * 100;
}
console.log(percent(quotes[i].Close, quotes[i+3].Close) + ' %');
};
相关文章:
- 如何在javascript中获取两个日期之间的周六和周日的日期
- 在Google Analytics中跟踪用户,但只能在两个操作之间跟踪
- 如何在两个不同的iframe HTML之间进行通信
- 有效地获取两个区间之间的随机整数
- 如何用moment.js列出两个日期之间的所有月份
- jQuery在两个字符串标识符之间选择HTML
- JavaScript中的RegEx:两个标签之间的内容
- moment.js在两个时区格式的日期之间存在差异
- Javascript-如何使用bootstrap日期时间选择器自动计算两个时间输入之间的差异
- 计算HTML表TD中两个数字之间的百分比
- 用时间戳获取两个不同日期之间的时间差
- 通过共享服务在两个不同ng应用程序中的控制器之间共享数据
- 如何在jQuery中获取两个事件之间的时间差
- 通过node.js和socket.io在两个用户之间发送消息
- JavaScript函数,用于计算两个日期之间的年、月和天数
- 有没有一种方法可以从两个标签之间提取文本,并以我选择的格式输出
- 如何在两个
之间共享数据?使用AngularJS和温泉UI - 用于删除两个“”之间的字符的正则表达式是什么/"在javascript中
- 如何在两个"h "之间选择元素除了一个元素使用jquery
- 在JavaScript中从字符串中获取两个'/'之间的文本