Javascript for循环将最后提取的数据集添加到数组中的每个位置

Javascript for循环将最后提取的数据集添加到数组中的每个位置,javascript,arrays,loops,object,Javascript,Arrays,Loops,Object,所以我100%肯定我在做一些愚蠢的事情: function storeData(){ for (var i in json.result){ var pair = json.result[i] marketName = pair.MarketName price = pair.Last extractedData[i,0] = marketName extractedData[i,1] = price

所以我100%肯定我在做一些愚蠢的事情:

function storeData(){

    for (var i in json.result){ 

        var pair = json.result[i]
        marketName = pair.MarketName
        price = pair.Last

        extractedData[i,0] = marketName
        extractedData[i,1] = price
        totalExtractedData[i] = extractedData
    }
    console.log(totalExtractedData)
}
问题在于,与其在每行(约260行)中创建一个包含每个连续市场名称和最新价格的数组,不如返回一个大小约260的数组,但在每一行中都包含最后提取的数据集:

[ [ 'USDT-ZEC', 235.00000001 ],
  [ 'USDT-ZEC', 235.00000001 ],
  [ 'USDT-ZEC', 235.00000001 ],
  [ 'USDT-ZEC', 235.00000001 ],
  [ 'USDT-ZEC', 235.00000001 ]..]
这是有问题的json文件:

我已经测试了我能想到的每一种排列方式,但我肯定这是非常简单的

如有任何见解,将不胜感激


谢谢

您需要在循环外部声明totalExtractedData变量

function storeData(){
    var totalExtractedData;
    for (var i in json.result){ 

        var pair = json.result[i]
        marketName = pair.MarketName
        price = pair.Last

        extractedData[i,0] = marketName
        extractedData[i,1] = price
        totalExtractedData[i] = extractedData
    }
    console.log(totalExtractedData)
}

您需要在循环外部声明totalExtractedData变量

function storeData(){
    var totalExtractedData;
    for (var i in json.result){ 

        var pair = json.result[i]
        marketName = pair.MarketName
        price = pair.Last

        extractedData[i,0] = marketName
        extractedData[i,1] = price
        totalExtractedData[i] = extractedData
    }
    console.log(totalExtractedData)
}

我不知道你想干什么。也许这样可以:

extractedData = [];
for (var i in json.result){
    console.log(i);
    var pair = json.result[i]
    marketName = pair.MarketName
    price = pair.Last
    extractedData.push([marketName,price]);
}
console.log(extractedData);

我不知道你想干什么。也许这样可以:

extractedData = [];
for (var i in json.result){
    console.log(i);
    var pair = json.result[i]
    marketName = pair.MarketName
    price = pair.Last
    extractedData.push([marketName,price]);
}
console.log(extractedData);

问题:

我认为您的问题在于声明变量的方式以及如何在数组中推送值:

如果您取消声明变量
extractedData
而不使用
var
关键字,则该变量将是全局变量,并且将始终使用上次迭代的值进行更新,因此在数组中推送该变量时,它将指向同一数组变量

解决方案:

如果要推入二维数组,则需要使用
array[i][0]
而不是
array[i,0]

您需要替换:

extractedData[i,0] = marketName
extractedData[i,1] = price
totalExtractedData[i] = extractedData
以下是:

totalExtractedData[i] = [];
totalExtractedData[i][0] = marketName;
totalExtractedData[i][1] = price;
演示:

这就是你的职责:

var json={
“成功”:没错,
“电文”:“,
“结果”:[{
“MarketName”:“BITCNY-BTC”,
“高”:31053.62881383,
“低”:27015.8500000,
“卷”:44.06800758,
“最后”:2956995000000,
“基本卷”:1271058.32726181,
“时间戳”:“2017-08-25T10:24:04.07”,
“投标”:28702.45000000,
“询问”:31000.00000000,
“OpenBuyOrders”:36,
“公开销售订单”:49,
“前一天”:27355.00000000,
“已创建”:“2015-12-11T06:31:40.653”
}, {
“市场名称”:“BTC-1ST”,
“高”:0.00016199,
“低”:0.00015267,
“体积”:552059.58404200,
“最后”:0.00016171,
“基本卷”:86.52132446,
“时间戳”:“2017-08-25T10:24:30.113”,
“投标”:0.00016171,
“询问”:0.00016199,
“OpenBuyOrders”:187,
“OpenSellOrders”:3530,
“前一天”:0.00015480,
“已创建”:“2017-06-06T01:22:35.727”
}, {
“MarketName”:“BTC-2GIVE”,
“高”:0.00000121,
“低”:0.0000013,
“卷”:4931418.39409932,
“最后”:0.0000018,
“基本卷”:5.74430002,
“时间戳”:“2017-08-25T10:22:58.64”,
“投标”:0.0000018,
“询问”:0.00000119,
“OpenBuyOrders”:263,
“公开销售订单”:1921年,
“前一天”:0.0000013,
“已创建”:“2016-05-16T06:44:15.287”
}]
};
函数storeData(){
var totalExtractedData=[];
for(json.result中的变量i){
var pair=json.result[i];
var marketName=pair.marketName;
var价格=对。最后;
总提取数据[i]=[];
totalExtractedData[i][0]=市场名称;
总提取数据[i][1]=价格;
}
console.log(totalExtractedData);
}

storeData()问题:

我认为您的问题在于声明变量的方式以及如何在数组中推送值:

如果您取消声明变量
extractedData
而不使用
var
关键字,则该变量将是全局变量,并且将始终使用上次迭代的值进行更新,因此在数组中推送该变量时,它将指向同一数组变量

解决方案:

如果要推入二维数组,则需要使用
array[i][0]
而不是
array[i,0]

您需要替换:

extractedData[i,0] = marketName
extractedData[i,1] = price
totalExtractedData[i] = extractedData
以下是:

totalExtractedData[i] = [];
totalExtractedData[i][0] = marketName;
totalExtractedData[i][1] = price;
演示:

这就是你的职责:

var json={
“成功”:没错,
“电文”:“,
“结果”:[{
“MarketName”:“BITCNY-BTC”,
“高”:31053.62881383,
“低”:27015.8500000,
“卷”:44.06800758,
“最后”:2956995000000,
“基本卷”:1271058.32726181,
“时间戳”:“2017-08-25T10:24:04.07”,
“投标”:28702.45000000,
“询问”:31000.00000000,
“OpenBuyOrders”:36,
“公开销售订单”:49,
“前一天”:27355.00000000,
“已创建”:“2015-12-11T06:31:40.653”
}, {
“市场名称”:“BTC-1ST”,
“高”:0.00016199,
“低”:0.00015267,
“体积”:552059.58404200,
“最后”:0.00016171,
“基本卷”:86.52132446,
“时间戳”:“2017-08-25T10:24:30.113”,
“投标”:0.00016171,
“询问”:0.00016199,
“OpenBuyOrders”:187,
“OpenSellOrders”:3530,
“前一天”:0.00015480,
“已创建”:“2017-06-06T01:22:35.727”
}, {
“MarketName”:“BTC-2GIVE”,
“高”:0.00000121,
“低”:0.0000013,
“卷”:4931418.39409932,
“最后”:0.0000018,
“基本卷”:5.74430002,
“时间戳”:“2017-08-25T10:22:58.64”,
“投标”:0.0000018,
“询问”:0.00000119,
“OpenBuyOrders”:263,
“公开销售订单”:1921年,
“前一天”:0.0000013,
“已创建”:“2016-05-16T06:44:15.287”
}]
};
函数storeData(){
var totalExtractedData=[];
for(json.result中的变量i){
var pair=json.result[i];
var marketName=pair.marketName;
var价格=对。最后;
总提取数据[i]=[];
totalExtractedData[i][0]=市场名称;
总提取数据[i][1]=价格;
}
console.log(totalExtractedData);
}

storeData()
每次通过循环,您只需覆盖相同的
extracteddata
数组,并且
totalExtractedData
对同一数组有多个引用。每次通过循环时,都需要创建一个新的
extractedData
数组

function storeData(){
    var totalExtractedData = [];
    var extractedData;
    for (var i in json.result){ 
        var pair = json.result[i];
        extractedData = [];
        extractedData[0] = pair.MarketName;
        extractedData[1] = pair.Last;
        totalExtractedData.push(extractedData);
    }
    console.log(totalExtractedData)
}
此外,没有理由在
extractedData
的索引中使用
i
extractedData[i,0]
extractedData[0]
相同,因为