Javascript中的Push命令不会创建正确的多维数组

时间:2014-06-22 14:13:33

标签: javascript javascript-debugger

我尝试生成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)

3 个答案:

答案 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而不是生成的随机数。