所以我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
我已经测试了我能想到的每一种排列,但我很肯定这是一种简单易行的东西。
任何见解都将受到高度赞赏。
谢谢!
答案 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;
<强>演示:强>
这应该是你的功能:
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;
注意:强>
编写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
的索引中使用extractedData
。 exctractedData[i, 0]
与extractedData[0]
相同,因为comma operator只返回其第二个操作数。