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

时间:2017-08-25 08:48:22

标签: 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
        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文件:

https://bittrex.com/api/v1.1/public/getmarketsummaries

我已经测试了我能想到的每一种排列,但我很肯定这是一种简单易行的东西。

任何见解都将受到高度赞赏。

谢谢!

4 个答案:

答案 0 :(得分:0)

您需要在循环外部声明totalExtractedData var

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)
}

答案 1 :(得分:0)

不确定我明白你要做什么。也许这会做:

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);

答案 2 :(得分:0)

<强>问题:

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

如果你在没有extractedData关键字的情况下取消变量var,那么它将是全局变量,并且将始终使用最后一个迭代值进行更新,因此当您在数组中推送此变量时,它将指向相同的数组变量。

<强>解决方案:

如果您想推入二维数组,则需要使用array[i][0]代替arrat[i,0]

您需要替换:

extractedData[i,0] = marketName
extractedData[i,1] = price
totalExtractedData[i] = extractedData

以下内容:

totalExtractedData[i] = [];
totalExtractedData[i][0] = marketName;
totalExtractedData[i][1] = price;

<强>演示:

这应该是你的功能:

&#13;
&#13;
var json = {
  "success": true,
  "message": "",
  "result": [{
    "MarketName": "BITCNY-BTC",
    "High": 31053.62881383,
    "Low": 27015.85000000,
    "Volume": 44.06800758,
    "Last": 29569.95000000,
    "BaseVolume": 1271058.32726181,
    "TimeStamp": "2017-08-25T10:24:04.07",
    "Bid": 28702.45000000,
    "Ask": 31000.00000000,
    "OpenBuyOrders": 36,
    "OpenSellOrders": 49,
    "PrevDay": 27355.00000000,
    "Created": "2015-12-11T06:31:40.653"
  }, {
    "MarketName": "BTC-1ST",
    "High": 0.00016199,
    "Low": 0.00015267,
    "Volume": 552059.58404200,
    "Last": 0.00016171,
    "BaseVolume": 86.52132446,
    "TimeStamp": "2017-08-25T10:24:30.113",
    "Bid": 0.00016171,
    "Ask": 0.00016199,
    "OpenBuyOrders": 187,
    "OpenSellOrders": 3530,
    "PrevDay": 0.00015480,
    "Created": "2017-06-06T01:22:35.727"
  }, {
    "MarketName": "BTC-2GIVE",
    "High": 0.00000121,
    "Low": 0.00000113,
    "Volume": 4931418.39409932,
    "Last": 0.00000118,
    "BaseVolume": 5.74430002,
    "TimeStamp": "2017-08-25T10:22:58.64",
    "Bid": 0.00000118,
    "Ask": 0.00000119,
    "OpenBuyOrders": 263,
    "OpenSellOrders": 1921,
    "PrevDay": 0.00000113,
    "Created": "2016-05-16T06:44:15.287"
  }]
};

function storeData() {
  var totalExtractedData = [];
  for (var i in json.result) {
    var pair = json.result[i];
    var marketName = pair.MarketName;
    var price = pair.Last;
    totalExtractedData[i] = [];
    totalExtractedData[i][0] = marketName;
    totalExtractedData[i][1] = price;
  }
  console.log(totalExtractedData);
}

storeData();
&#13;
&#13;
&#13;

注意:

编写JavaScript代码时要记住这些要点:

  • 使用var声明您的变量,以便它们是函数的本地变量,否则您将拥有全局变量。
  • 在每个陈述中缺少分号;是一种不好的做法,你 最好在每一行的末尾放置一个;

答案 3 :(得分:0)

每次循环时,您只是覆盖相同的exctractedData数组,而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)
}

此外,没有理由在i的索引中使用extractedDataexctractedData[i, 0]extractedData[0]相同,因为comma operator只返回其第二个操作数。