我正在Google表格中使用此脚本从coinmarketcap api中提取数据。我添加了一个循环(coins.forEach),只需一次调用api(有限的信用)即可获取我想要的硬币的所有数据。但是在每个循环/硬币之后,它会继续在列中下降,我想为每个硬币使用新的列。如何在不为每个硬币再次调用函数(和API)的情况下执行此操作?我希望我能说清楚一点,我不记得我在哪里找到原始剧本
function cmc(){
var response = CMCFetch();
if (response.status === true) { response.data = response.datos;
}
return response.data;}
function xCMCFetch() {
var uri = "https://sandbox-api.coinmarketcap.com/v1/cryptocurrency/listings/latest?CMC_PRO_API_KEY=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
cache = CacheService.getScriptCache(),
response = { status: true, name: "Unknown", USD: 0, BTC: 0, datos: [], error:null },
obj_array = null;
obj_array = JSON.parse(cache.get('firstX'));
if (obj_array === null )
{ try {
obj_array = JSON.parse(UrlFetchApp.fetch(uri).getContentText());
cache.put('firstX', JSON.stringify(obj_array), 20); } // ** cache for 20 sec
catch (e) { response.status = false; response.error = e } }
var coins = ["btc","eth","ltc","bch"];
if (response.status === true) {
coins.forEach(function(symb){
for (r in obj_array.data){
if (obj_array.data[r].symbol == symb.toUpperCase()) {
response.datos.push(
obj_array.data[r].total_supply,
obj_array.data[r].cmc_rank,
obj_array.data[r].quote.USD.market_cap,
obj_array.data[r].quote.USD.volume_24h,
parseFloat(obj_array.data[r].quote.USD.percent_change_7d),
parseFloat(obj_array.data[r].quote.USD.percent_change_24h),
parseFloat(obj_array.data[r].quote.USD.percent_change_1h),
obj_array.data[r].quote.USD.price
);
break; } } })}
return response;
}
答案 0 :(得分:1)
我猜问题出在for (r in obj_array.data)
。
这意味着您要遍历每个对象的属性。
因此,您无法致电obj_array.data[r].symbol
。
将其替换为for (int r = 0; r < obj_array.data.length; r++)