我尝试生成10次随机数3次,并在每10个数字批次中捕获hi,the lo和last。我创建了一个hi / lo / last数组,它被推入另一个数组,因此我可以跟踪数字。不幸的是,下面的push命令似乎只是添加了最后的hi / lo / last 3次,而不是每个hi / lo / last。不确定我做错了什么。
另外,我显然不是一名专业的程序员,他在excel中主要使用VBA,我可以逐步完成一个程序。有没有办法在Sublime中用Javascript做到这一点?我在Windows环境中工作,使用Sublime Text 2,使用Javascript的Node构建。
提前感谢您的帮助。
var price;
var hiPrice;
var loPrice;
var intervalPrices = []
var initialPrices = [];
var rows = 3;
var columns = 3;
var randomPrices = function(){
price = 1
hiPrice = price
loPrice = price
for (var i = 1; i <= 30; i++){
price = Math.round((price+(Math.random()*2-1)/1000)*100000)/100000
priceIs()
if (i%10 == 0){
intervalPrices[0] = hiPrice
intervalPrices[1] = loPrice
intervalPrices[2] = price
initialPrices.push(intervalPrices)
hiPrice = price
loPrice = price
}
}
}
var priceIs = function(){
if (price >= hiPrice) {
hiPrice = price
}
if (price < loPrice) {
loPrice = price
}
}
randomPrices()
console.log(initialPrices)
答案 0 :(得分:0)
尝试制作单独的对象或使其克隆而不是原始对象。
initialPrices.push([intervalPrices[0], intervalPrices[1], intervalPrices[2]])
现在
console.log(JSON.stringify(initialPrices))
[[1.00092,0.99835,0.99906],[0.99906,0.99758,0.99762],[0.99907,0.99734,0.99907]]
答案 1 :(得分:0)
每当您修改intervalPrices
时,它只是一个变量引用的概率,它将覆盖intervalPrices
的上一个值。使用不同的值推送相同的变量将不会保留已推送到数组的值,因为该数组的每个元素都指向相同的intervalPrices
变量。
您的更新代码 - 阅读评论以便更好地理解
var randomPrices = function(){
price = 1
hiPrice = price
loPrice = price
for (var i = 1; i <= 30; i++){
//create a new Object
var obj = {};
price = Math.round((price+(Math.random()*2-1)/1000)*100000)/100000
priceIs()
if (i%10 == 0){
//assing new values to the Object
obj[0] = hiPrice
obj[1] = loPrice
obj[2] = price
initialPrices.push(obj)
hiPrice = price
loPrice = price
}
}
}
答案 2 :(得分:0)
使用相同的变量名来构建您尝试推送的阵列会导致您的问题。试试这个:
for (var i = 1; i <= 30; i++) {
price = Math.round((price+(Math.random()*2-1)/1000)*100000)/100000;
priceIs();
if (i%10 == 0){
initialPrices.push([hiPrice,loPrice,price]);
hiPrice = 1;
loPrice = 1;
}
}
我还将hiPrice和loPrice设置为1而不是生成的随机数。